유니티에서 레이어는 다방면으로 활용이 된다.
camera를 추가하여 culling mask에 레이어 지정을 통해 해당 레이어만 보이도록, 혹은 보이지 않도록 설정하는 것이 가능하며, 기본적인 충돌 지정 또한 physics의 collision matrix를 통해 정하는 것 또한 가능하다.
public static class LayerUtil
{
public static void AddLayer(ref LayerMask targer, params string[] names)
{
foreach(string name in names)
{
target |= (1 << LayerMask.NameToLayer(name));
}
}
public static void RemoveLayer(ref LayerMask target, params string[] names)
{
foreach(string name in names)
{
target &= ~(1 << LayerMask.NameToLayer(name));
}
}
}
public class Layer
{
private LayerMask _targetLayer;
private void Init()
{
LayerUtil.AddLayer(_targetLayer, "Player", "Monster");
}
}
렌더링 되고 있는 화면을 텍스쳐 형태로 저장한 것으로, 보조 카메라가 렌더링하는 화면을 추가로 다루고 싶을 때 렌더링 텍스쳐를 사용한다. 최적화 요소로 쓰이며, 자연효과를 연산할 때 생기는 부하를 방지하기 위해 녹화해두는 방식으로 구현된다.
아래는 1번을 누르면 스크린(CCTV)에 1번 카메라의 화면이 나오고, 2번을 누르면 2번 카메라의 화면이 나오도록 구현한 스크립트이다.
public class CameraController : MonoBehaviour
{
[SerializeField] private RawImage screen;
[SerializeField] private RenderTexture camera1;
[SerializeField] private RenderTexture camera2;
private void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
screen.texture = camera1;
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
screen.texture = camera2;
}
}
}
이후 프로젝트 창에서 렌더링 텍스쳐를 생성하여 인스펙터 창에서 생성한 카메라의 텍스쳐에 넣고, Raw Image를 생성하여 해당 스크립트를 넣은 뒤 인스펙터에서 드래그하여 각각의 렌더링 텍스쳐를 지정하면 위에서 설명한 방식으로 작동한다.