프로그래밍/Unity

유니티에서 Layer 의 역할 : 성능 최적화

selinatsu 2024. 10. 19. 14:37
반응형

Unity에서 레이어를 설정하고 사용할 때는 모든 오브젝트를 검사하는 것이 아니라, 설정된 레이어에 속한 오브젝트들만 검사를 하게 됩니다.

이것은 주로 성능 최적화와 특정 오브젝트만 대상으로 작업을 수행하기 위해 사용됩니다.

 

레이어 설정의 역할

Unity에서 **레이어(Layer)**는 게임 오브젝트를 그룹화하는 방식으로, 주로 다음과 같은 상황에서 사용됩니다

 

* 충돌 검사 (Collision Detection)

* 레이캐스트 (Raycasting)

* 렌더링 처리 (Rendering)

 

Raycast에서 레이어 사용

만약 레이어를 사용하지 않는다면, Unity는 레이캐스트나 충돌 검사를 수행할 때 모든 게임 오브젝트를 검사합니다.

하지만 특정 레이어만 대상으로 검사하고 싶을 때, **레이어 마스크(Layer Mask)**를 사용하면 성능을 개선하고 불필요한 오브젝트들은 검사하지 않도록 설정할 수 있습니다.

 

int layerMask = LayerMask.GetMask("Enemy"); // "Enemy"라는 레이어에만 반응
RaycastHit hit;

if (Physics.Raycast(transform.position, transform.forward, out hit, Mathf.Infinity, layerMask))
{
    Debug.Log("적을 맞췄습니다: " + hit.collider.name);
}

 

이 코드에서는 레이캐스트가 "Enemy" 레이어에 있는 오브젝트들만 대상으로 검사합니다.
이로 인해 다른 레이어에 속한 오브젝트들은 검사 대상에서 제외됩니다.
 
 

충돌 검사에서도 동일한 개념

충돌 검사에서도 동일하게, 특정 레이어에 속한 오브젝트들끼리만 충돌하도록 설정할 수 있습니다.

레이어 충돌 매트릭스를 이용해 어떤 레이어끼리 충돌할지 정의할 수 있고, 나머지 레이어는 충돌 검사를 아예 하지 않도록 설정할 수 있습니다.

결론적으로, 레이어를 설정하면 특정 레이어에 속하지 않은 오브젝트들은 검사 자체를 건너뛰어 패스할 수 있게 되어, 불필요한 연산을 줄일 수 있습니다.

 

 

성능 최적화

비록 모든 오브젝트에 대해 "레이어 판별"이 수행되지만, 이는 매우 가벼운 연산입니다.

오브젝트가 많더라도 복잡한 충돌 검사나 물리 계산이 아니라 간단한 조건문으로 레이어를 확인하는 과정이기 때문에 성능에 미치는 영향은 미미합니다.

그리고 레이어 조건이 통과되지 않은 오브젝트는 더 이상 검사하지 않기 때문에, 실제로는 성능 최적화에 큰 도움이 됩니다.

 

따라서 Unity에서 레이어를 설정하고 사용하는 것은 필요 없는 연산을 줄여 효율적인 검사를 가능하게 하는 중요한 기법입니다.

 

반응형