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

n-yoda's blog

主にUnity3Dに関するあんまり技術的じゃないメモ的な何かを書いています。

GUIElementのクリック判定

GUIElement(GUITexture、GUIText)のクリック判定まとめ!
ただし、GUIElementを使うことはあんまりおすすめしません!!
GUIクラスとGUIElementの比較

GUIElementの基本的なことはReferenceを見ましょう。
注意点は
・座標指定を絶対座標でやるなら→PixelInsertで指定。
・相対座標(ViewPortの座標)でやるなら→Transformで指定。
・Z座標はLocal座標が表示の順番として採用されるので、親子関係が作りづらい。

GUIElementはZ座標に従ってクリック判定をしてくれるので案外便利。
(つまり、重なっている場合上にある方を優先してくれる。)

・GameObject -> Create Other からGUIText、GUITextureをいくつも作る。
・次のスクリプトをカメラ等に追加。

public class GUIDemo : MonoBehaviour {
	GUILayer guiLayer;
	void Start()
	{
		guiLayer = Camera.main.GetComponent<GUILayer>();
	}
	void Update ()
	{
		//シーン上の全GUIElementに対して当たり判定
		GUIElement hit = guiLayer.HitTest (Input.mousePosition);
		if (Input.GetMouseButtonDown (0) && hit != null) {
			//イベント処理
			print (hit.name);
		}
	}
}

こんな感じに書けば前後関係も考慮してくれるので、
ポップアップダイアログなんかも簡単に書けますね!

その他、
・当たり判定から除外したいものは、レイヤーを「Ignore Raycast」にする。
・個別の当たり判定も出来ます→GUIElement.HitTest(Vector3 pos)