読者です 読者をやめる 読者になる 読者になる

ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Unity】備忘録#1 クリックしたオブジェクトの取得について(3Dと2D)

検索すればすぐ出て来ることですが、自分の中での整理+メモ目的で。

まず前提として「3Dと2Dで記述方法が異なる」ので注意が必要です。


■3Dの場合

1:クリックしたいオブジェクトにBox Colliderコンポーネントを追加する

2:以下のスクリプトの記述で取得可能になる

// 左クリックしたオブジェクトを取得する関数(3D)
public GameObject getClickObject() {
  GameObject result = null;
  // 左クリックされた場所のオブジェクトを取得
  if(Input.GetMouseButtonDown(0)) {
   Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
   RaycastHit hit = new RaycastHit();
   if (Physics.Raycast(ray, out hit)){
     result = hit.collider.gameObject;
   }
 }
 return result;
}

■2Dの場合

1:クリックしたいオブジェクトにBox Collider 2Dコンポーネントを追加する

2:以下のスクリプトの記述で取得可能になる

// 左クリックしたオブジェクトを取得する関数(2D)
private GameObject getClickObject() {
 GameObject result = null;
 // 左クリックされた場所のオブジェクトを取得
 if(Input.GetMouseButtonDown(0)) {
   Vector2 tapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   Collider2D collition2d = Physics2D.OverlapPoint(tapPoint);
   if (collition2d) {
     result = collition2d.transform.gameObject;
   }
 }
 return result;
}


以下のようにUpdate関数の中で呼び出すとクリック監視になります。

void Update () {
 GameObject obj = getClickObject ();
 if (obj != null) {
   // 以下オブジェクトがクリックされた時の処理
 }
}


クリックされた時にそのオブジェクトをDestroyしたりなど、色々と多用しています。


■おまけ
Input.GetMouseButtonにおける数値一覧

クリックの種類 数値
左クリック 0
右クリック 1
中(ホイール)クリック 2