본문 바로가기

Unreal/언리얼 엔진 5로 개발하는 멀티플레이어 게임(Book)

[Unreal] 액터의 연관성 이해

연관성은 플레이어에게 얼마나 중요한지에 따라 씬에서 어떤 오브젝트를 표시하거나 업데이트를 결정하는 과정이다. 연관성은 언리얼 엔진에서 중요한 개념으로, 작동 방식을 이해하면 게임이 효율적으로 실행되도록 할 수 있다.

 

언리얼 엔진에서 연관성이란 엔진이 게임 세계에서 현재 위치를 기반으로 어떤 액터를 어느 클라이언트에 복제할지, 어떤 액터가 플레이어의 현재 시아나 영역과 관련 있는지를 결정하는 방식을 말한다.

 

언리얼은 AActor::ISNetRelevantFor()라는 가상 함수를 사용해 액터의 연관성을 테스트한다. 이 테스트에서는 클라이언트에 실제로 영향을 미칠 수 있는 액터를 신뢰성 있게 추정하기 위한 프로퍼티들을 평가한다. 이 테스트를 요약하면 다음과 같다.

 

1단계: 다음 조건에 해당하면 액터는 연관성이 있다.

  • bAlwaysRelevant 플래그가 true로 설정
  • Pawn이나 PlayerController가 액터를 소유
  • 엑터가 Pawn 객체
  • Pawn 객체가 소음이나 데미지와 같은 액션의 주체

2단계: 액터의 bNetUseOwnerRelevancy 프로퍼티가 true이고 액터에 오너가 있으면, 오너의 연관성이 사용된다.

 

3단계: 액터의 bOnlyRelevantToOwner 프로퍼티가 true로 설정돼 있고 1단계를 통과하지 못했다면, 액터는 연관성이 없다.

 

4단계: 액터가 다른 액터의 스켈레통에 연결돼 있으면, 액터의 연관성은 부모 액터의 연관성에 따라 결정된다.

 

5단계: 액터의 bHidden 프로퍼티가 true로 설정돼 있고 루트 컴포넌트가 검사 중인 액터와 충돌하지 않으면, 액터는 연관성이 없다.

 

6단계: AGameNetworkManager가 거리 기반 연관성을 사용하도록 설정된 경우, 넷 컬 디스턴스(Net Cull Distance)보다 가까우면 액터가 연관성이 있다.

 

Pawn/Character 및 PlayerController 클래스는 이동 컴포넌트와 같은 추가 정보를 고려해야 하므로, 연관성 검사가 약간 다르다.

 

이 시스템이 완벽하지 않다는 점에 유의해야 한다. 대형 액터를 처리할 때 거리 검사 결과를 잘못 판단할 수도 있기 때문이다. 게다가, 이 시스템은 소리 차단이나 주변 소리와 관련된 다른 복잡성을 고려하지 않는다. 그렇지만, 근사값은 게임 플레이 중에 충분히 좋은 결과를 얻을 만큼 정확하다.