📚
【Unity】RaycastでUIが貫通するのを防ぐ方法
UIに触れているかどうか判断してくれるEventSystem.current.IsPointerOverGameObject()というものがあるので、if文を書くだけでRayCastがUIを貫通しなくなります。
using UnityEngine.EventSystems;//忘れずに追加
void RayCast()
{
if (EventSystem.current.IsPointerOverGameObject()) return;
//ここからRayCastコード書く
if (Physics.Raycast(ray, out hit, 100f, LayerMask))
{
...
}
}
またスマホだとEventSystem.current.IsPointerOverGameObject()は作動しないので代わりにEventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)を使います。以下、UnitynoEditorとスマホ操作時でUIに触れているか確認コードを変更させています。
#if UNITY_EDITOR
if (EventSystem.current.IsPointerOverGameObject()) return;
#else
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))return;
#endif
UnityyRemoteでスマホ操作するとUnityyEditorの操作になってしまってこのスクリプトが反応しないので、BuildAndRunで実機で操作確認しましょう。
記事は以上です。お疲れ様でした😌
Discussion