유니티 Raycast를 사용할 때 특정한 오브젝트만 Raycast에 Target되기를 원하는 경우 LayerMask를 사용한다

하지만 LayerMask를 사용할 때 주의해야할 점이 


RaycastHit hitInfo;

Ray ray = Camera.main.ScreenPointToRay(InputManager.GetInputPos());



1.   if (Physics.Raycast(ray, out hitInfo, 1 << LayerMask.NameToLayer("특정 레이어") ))


2.   if (Physics.Raycast(ray, out hitInfo, float.MaxValue, 1 << LayerMask.NameToLayer("특정 레이어") ))



위의 1번과 2번의 차이는 중간에 float.MaxValue 즉 Raycast의 파라미터 중 maxDistance를 넣어주느냐 마냐의 차이이다


1번의 경우에는 Raycast는 1 << LayerMask.NameToLayer("특정 레이어") 를 flaot maxDistance 파라미터에 넣어주는 것으로 인식하여서 LayerMask가 제대로 적용되지 않는다. 함수가 프로그래머가 의도한 바와는 다르게 1 << LayerMask.NameToLayer("특정 레이어") 를 다른 parameter 값으로 인식한 경우다. 게다가 Raycast에는 maxDistance 파라미터가 없이 LayerMask를 파라미터로 넣는 함수형은 없다.


그래서 프로그래머는 maxDistance에 float.MaxValue를 넣어주어야만 뒤의 1 << LayerMask.NameToLayer("특정 레이어")를 프로그래머가 의도한대로 LayerMask의 값으로 인식한다

+ Recent posts