【ゲーム開発】画面上のオブジェクトをクリックする【unity】 | えんぴつのブログ

えんぴつのブログ

プログラミングを書いたり、ゲームをしたり
夢は安定した老後

テーマ:
 -UnityでRPGを作りたい...!!

 そんな管理人の備忘録


 画面上のキャラクターをクリックして、イベントを呼び出す
 Unityで特定のスプライトだけクリックするためのソースコードを掲載!

 【学習する内容】
   1.クリックした位置を取得する関数
   2.クリックした位置がコライダー上か判定する関数
   3.オブジェクトを格納する変数
 
click

 左のブロントさんのスプライトにはCollider 2Dを保持している。クリックの判定にはこのCollider 2Dが必要!右のブロントさんには保持していないため、クリックしてもConsoleには何も表示されない。

 タッチイベントを判定するオブジェクトTouchManagerに、スクリプトTouch.csをコンポーネントに追加する。

 タッチしたいスプライトにCollider 2Dを加える。
 
 これで実行すれば、Consoleにオブジェクト名が表示されるようになる!あとは自由に動作を実装していこう!

以下サンプルコード
Touch.cs

void Update () {
 if (Input.GetMouseButtonDown(0)) {

  Vector3 aTapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  Collider2D aCollider2d = Physics2D.OverlapPoint(aTapPoint);

  if (aCollider2d) {
   GameObject obj = aCollider2d.transform.gameObject;
   Debug.Log(obj.name);
  }
 }
}

 【おまけ】
 TouchManagerオブジェクトを作成せず、各スプライトにスクリプトを格納して、クリックした際に色を変化させるコード

 private bool isClick = false;

 // Update is called once per frame
 void Update () {
  if(Input.GetMouseButtonDown(0)){
   OnMouseDown();
   if(isClick){
    isClick = false;
   }else{
    isClick = true;
   }
  }
  if (Input.GetMouseButton(0)) {
  }
  if (Input.GetMouseButtonUp(0)) {
  }
 }

 void OnMouseDown(){
  Vector3 aTapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  Collider2D aCollider2d = Physics2D.OverlapPoint(aTapPoint);
  if (aCollider2d) {
   GameObject obj = aCollider2d.transform.gameObject;
   if (obj.name == this.name) {
    if(isClick){
     this.renderer.material.color = Color.white;
    }else{
    this.renderer.material.color = Color.blue;
    }
   }
  }
 }

click2

 選択したブロントさんが青色に変化する!もう一度クリックすると戻る。

 -----------------------------------------------------
個人ブログもよろしく!
 動物園てくの
 喫茶店てくの
 漫画喫茶てくの