[Unity]UIがクリックされたことを検知

この記事は約2分で読めます。
スポンサーリンク

やりたいこと

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 は指定されたカメラから見たスクリーンポイントを含むか。

コメント

タイトルとURLをコピーしました