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


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


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

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


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オブジェクトをクリックするとき


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新着記事
【簡単!】Unity2Dでクリックした方向に弾を飛ばすサンプル
  • このエントリーをはてなブックマークに追加

PAGE TOP