検索すればすぐ出て来ることですが、自分の中での整理+メモ目的で。
まず前提として「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 |