Unity

UnityでUIをタップした際に、奥のWorld上のオブジェクトが反応しないようにする方法

UnityでuGUIで作成したButtonをタップした際に奥にあるオブジェクトにもタップ判定がある場合、そちらも反応してしまうということがありました。

そちらの解決策を紹介したいと思います。

方法1

EventSystem->IsPointerOverGameObjectを使うことで解決できます。

参考までにコードを記載します。

public class SampleCode : MonoBehaviour {

    [SerializeField]
    private SpriteRenderer _sRenderer;

    void Awake() {
        _sRenderer.color = Color.red;
    }

    void OnTouchUp() {
        _sRenderer.color = Color.red;
    }

    void OnTouchDown() {
        if (EventSystem.current.IsPointerOverGameObject() == false) {
            _sRenderer.color = Color.blue;
        }
    }
}

Cubeを作成し、何かのuGUIが押された際に、Cubeと被っている場合はCubeは赤色のままですが、被っていない場合はCubeは青色になります。

また、IsPointerOverGameObject()は引数を取ることができます。
引数がある場合はタッチ用なのでiOSやAndroidでも検知して欲しい場合は引数が必要になります。

方法2

EventSystem->currentSelectedGameObjectを使うことで解決できます。

以下、使用例です。

public class SampleCode : MonoBehaviour {

    [SerializeField]
    private SpriteRenderer _sRenderer;

    void Awake() {
        _sRenderer.color = Color.red;
    }

    void OnTouchUp() {
        _sRenderer.color = Color.red;
    }

    void OnTouchDown() {
        if (EventSystem.current.currentSelectedGameObject == null) {
            _sRenderer.color = Color.blue;
        }
    }
}

関連記事

  1. Unity

    【中途採用】Unityエンジニアの転職先としてオススメする会社5選

    Unityエンジニアの需要ゲーム制作ツールとして不動の地位を築いた…

  2. Unity

    GTMF 2018東京に行ってきたのでまとめてみる

    7月13日(金)に行われたGTMF2018東京に行ってきました。公…

  3. Unity

    UniRxを使ってコードを見やすくする

    UniRxとはUniRxは、Reactive Extensions…

  4. Unity

    Behave 2 for Unityを使ってみた

    Behave 2 for UnityとはBehaviour Tre…

  5. Unity

    UnityIAPを導入するにあたり、つまずいた点

    UnityIAP(In App Purchase)はUnity5.3の…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

カテゴリー

最近の記事

  1. Unity

    UniRxを使ってコードを見やすくする
  2. Unity

    GTMF 2018東京に行ってきたのでまとめてみる
  3. Unity

    UnityでUIをタップした際に、奥のWorld上のオブジェクトが反応しないよう…
  4. Unity

    【中途採用】Unityエンジニアの転職先としてオススメする会社5選
  5. Unity

    Behave 2 for Unityを使ってみた
PAGE TOP