목차
Layers
Layers
는 씬의 한 부분만을 그리기 위해 Cameras
에 의해서 주로 사용되고 씬의 부분들만을 비추기위해 Lights
에 의해 사용되기도 합니다. 그러나 그들은collisions을 생성하기 위해서나 또는 colliders을 선택적으로 무시하기 위해 raycasting에 의해 사용될 수 있습니다.
Creating Layers
첫 번째 스텝은 새로운 레이어를 생성하는 것이고 그것은 우리가 하나의 GameObject
를 지정할 수 있습니다. 새로운 레이어를 생성하기 위해서 Edit 메뉴를 열고 Project Settings→Tags를 선택합니다.
우리는 빈 User Layers 하나에서 새로운 레이어를 생성합니다. 우리는 레이어 8을 선택합니다.
Assigning Layers
사용자는 새로운 레이어를 선택하고 게임 오브젝트의 하나에 그 레이어를 지정해야만 한다는 것을 명심해야 합니다.
태그 manager에서 우리는 플레이어 레이어를 레이어 8이 되도록 지정했습니다.
Drawing only a part of the scene with the camera's culling mask
카메라의 culling 마스크를 사용해서 사용자는 선택적으로 하나의 특정한 레이어에 있는 물체를 표현할 수 있습니다. 이것을 하기 위해서 선택적으로 물체를 표현해야 하는 카메라를 선택합니다.
Culling 마스크 속성에서 체크하거나 또는 체크하지 않는 레이어에 의해 culling 마스크를 변경합니다.
Casting Rays Selectively
레이어를 사용해서 사용자는 광선을 캐스트할 수 있고 특정 레이어에서 colliders를 무시할 수 있습니다. 예를 들어 사용자는 플레이어 레이어에 반하여 하나의 광선을 캐스트하고 싶을지도 모르고 모든 다른 colliders를 무시할지도 모릅니다.
Physics.Raycast 함수는 각 비트가 하나의 레이어가 무시되어질 것인지 아닌지를 결정하는 bitmask를 취합니다. layerMast에서 모든 비트들이 세팅된다면 우리는 모든 colliders에 반하여 충돌할 것입니다. 만약 layerMast가 0라면 우리는 광선과 함께인 어떠한 충돌도 결코 찾을 수 없을 것입니다.
// bit shift the index of the layer to get a bit mask var layerMask = 1 << 8; // Does the ray intersect any objects which are in the player layer. if (Physics.Raycast (transform.position, Vector3.forward, Mathf.Infinity, layerMask)) print ("The ray hit the player");
실제 세상에서 우리는 그것의 반대를 원합니다. 그러나 우리는 플레이어 레이어에서 그것들 외에 모든 colliders에 반하여 하나의 광선을 캐스트하기를 원합니다.
function Update () { // Bit shift the index of the layer (8) to get a bit mask var layerMask = 1 << 8; // This would cast rays only against colliders in layer 8. // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask. layerMask = ~layerMask; var hit : RaycastHit; // Does the ray intersect any objects excluding the player layer if (Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), hit, Mathf.Infinity, layerMask)) { Debug.DrawRay (transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow); print ("Did Hit"); } else { Debug.DrawRay (transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white); print ("Did not Hit"); } }
우리가 layerMast를 Raycast 함수로 패스하지 않을 때 그것은IgnoreRaycast 레이어를 사용하는 colliders을 무시할 것입니다. 이것이 광선을 캐스팅할 때 colliders을 무시하는 가장 쉬운 방법입니다.
- 출처: 유니티코리아위키 (CC BY-NC-SA 2.0)