やりたいこと
UnityでUI(正確に言うとRectTransformのcomonentを持つGameObject)がクリックされたことを検知します。
通常はButtonを継承すればいいのですが、そうもいかないとき(下にイベントをスルーしないといけないときなど)は自力でクリックされたことを検知する必要があります。
実装
以下の関数を使用します。
bool RectangleContainsScreenPoint (RectTransform rect, Vector2 screenPoint, Camera cam);
screenPointがrectの内側かどうかを検証します。内側の場合はtrueを返します。
UIに対して検証する場合はcamは設定不要です。
具体例
実装例は以下のようになります。
MonoBehaviourを継承したクラスで子供の名前が”GameObjectName”のオブジェクトに対して検証を行っています。
if (Input.GetMouseButtonUp(0)) {
var obj = tramsform.Find("GameObjectName");
if (RectTransformUtility.RectangleContainsScreenPoint(obj.GetComponent<RectTransform>(), Input.mousePosition))
{
Debug.Log ("GameObject is clicked");
}
}
参考にさせていただいたサイト
RectTransformUtility-RectangleContainsScreenPoint - Unity スクリプトリファレンス
RectTransform は指定されたカメラから見たスクリーンポイントを含むか。
コメント