Tips

【Unity】クリックしたゲームオブジェクトを取得する
2018.09.03

【Unity】クリックしたゲームオブジェクトを取得する

UnityでクリックされたGameObjectを取得する方法


左クリックされたGameObjectを取得する方法です。タップでも動作します。
3Dオブジェクトと2Dオブジェクトの時で書き方が違うので注意。
※厳密にはコライダーが3Dか2Dで異なる。
一応Update内にコピペすればそのまま動きます。

3Dオブジェクトをクリックするとき


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
 
public class GetClickedGameObject : MonoBehaviour {
 
    GameObject clickedGameObject;
 
    void Update () {
 
        if (Input.GetMouseButtonDown(0)) {
 
            clickedGameObject = null;
 
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();
 
            if (Physics.Raycast(ray, out hit)) {
                clickedGameObject = hit.collider.gameObject;
            }
 
            Debug.Log(clickedGameObject);
        }
    }
}

クリック対象のGameObjectには3Dコライダーを入れてください。
変数 clickedGameObject にクリックしたGameObjectが代入されます。

2Dオブジェクトをクリックするとき


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
 
public class GetClickedGameObject : MonoBehaviour {
 
    GameObject clickedGameObject;
 
    void Update () {
 
        if (Input.GetMouseButtonDown(0)) {
 
            clickedGameObject = null;
 
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit2D hit2d = Physics2D.Raycast((Vector2)ray.origin, (Vector2)ray.direction);
 
            if (hit2d) {
                clickedGameObject = hit2d.transform.gameObject;
            }
 
            Debug.Log(clickedGameObject);
        }
    }
}

クリック対象のGameObjectには2Dコライダーを入れてください。
変数 clickedGameObject にクリックしたGameObjectが代入されます。

補足


これらの処理には Ray というAPIが使われています。
Physics.Raycast や Physics2D.Raycast はオーバーロード(引数の指定の仕方)が複数あるので、詳しくなればもっと色々なことが出来るようになります。(Rayを飛ばす距離や向きの変更など)

以上です。

[Unity_317×90]

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search