📚

【Unity】RaycastでUIが貫通するのを防ぐ方法

2021/04/26に公開

https://www.youtube.com/watch?v=9O9iU8u5F0w

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