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;
}
}
}
この記事へのコメントはありません。