【Unity】UIのオブジェクトを選択した時、ワールド座標上のオブジェクトを選択できないようにする

例えば、マウスでUIオブジェクトをクリックしたとき、Input.MouseDown()メソッドも実行できてしまう
UIだけ操作したいので困る!

Rayを使った処理など、ゲームオブジェクトの情報を得るコードが実装されているケースでは、そのコードは有効となり、ポーズ画面なのに、オブジェクトの移動などができてしまいます。その場合、次のようなコードで対応しましょう

必要なusing

using UnityEngine.EventSystems;

追加コード

UIのところにカーソルがあると以降のコードを実行しない

// 追加:UI選択中は、以降のコードは実行しない
if (EventSystem.current.IsPointerOverGameObject())
{
    return;
}

// 次のようなコードの前に追加します
if (Input.GetMouseButtonDown(0))
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
}

IsPointerOverGameObject(): EventSystem.currentオブジェクトが提供するメソッドの1つで、現在のポインター(通常はマウスカーソル)がどのUI要素上にあるかを確認します。つまり、ポインターがUI要素上にある場合、このメソッドはtrueを返し、それ以外の場合はfalseを返します。

Unity

Posted by hidepon