유니티 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의 값으로 인식한다
'Game development > Unity' 카테고리의 다른 글
유니티 WorldSpace Position에서 Canvas Position으로 전환하기 (0) | 2018.03.24 |
---|---|
유니티에서 git 사용시 .obj 모델 메쉬 파일들이 커밋이 안될 때 해결 방법 (0) | 2018.03.22 |
유니티에서 UI Button을 계속 누르고 있는 상태를 Check하는 법 (0) | 2018.03.16 |
유니티에서 2D 캐릭터 에니메이션 만들 때 좌우 대칭 손쉽게 하는 법 (0) | 2018.02.20 |
한 오브젝트를 중심으로 orbit rotate 하기 (0) | 2018.02.02 |