NetUpdateFrequency
초당 네트워크 액터를 몇번 리플리케이션할지 결정하는 값.
다만 이는 "최대치"를 설정하는 것이고, 서버의 성능과 상황에 따라 더 낮은 빈도수로 갱신할 수 있음,
프로젝트나 액터의 설정에 따라 값을 적절하게 설정할 수 있다.
설정 방법
액터 내에서 SetNetUpdateFrequency(float Frequency) 함수를 호출하여 값 설정.
추가적인 내부함수로는 Get/SetMinNetUpdateFrequency가 존재하는데,
이는 값이 자주 바뀌지않으면서 복제를 설정하는 경우,
언리얼 자체적으로 성능 최적화를 위해 "최소 갱신주기"를 설정하도록 하는 기능.
갱신주기를 낮추고 클라이언트에서 그 사이의 값을 예측하는 최적화 방법도 존재한다.
예를들어 캐릭터가 회전/이동시 이전의 변동값을 가지고 다음에 값이 갱신되기 전까지 Tick등의 함수에서
이전에 변동된 값 * (1*갱신주기 * DeltaSecond) 만큼 움직이는 등의 방법이 있다.
Relevancy
"연관성"이라는 뜻으로, 언리얼 엔진은 연관성이 있는 클라이언트에게만 객체를 복사해주도록 한다.
이 연관성을 판단하는데에는 여러 기준이 존재한다
액터 클래스의 판단 기준
- Owner / Ownership
- 해당 액터를 소유하고 있는 액터와 그 Owner는 연관성이 있다고 판단한다.
- 예시) 무기(Actor)를 소유하고 있는 캐릭터(Owner / Charactor)
- Instigator
- 해당 액터에게 영향을 끼친 폰, 해당 액터와 Instigator는 연관성이 있다고 판단한다
- 예시) 데미지를 가한 폰(캐릭터)
- AlwaysRelevant
- 모든 클라이언트에게 항상 연관성이 있도록 하는 boolean 속성값.
- 중요한 대상이 있고, 모든 플레이어에게 복제되어야(보여야)할 때 사용
- NetUseOwnerRelevancy
- 오너 엑터의 연관성으로 해당 엑터(하위 액터)의 연관성을 대신 사용
- 예시)플레이어의 캐릭터가 가진 장비/무기 액터는 캐릭터와 항상 같이 보이거나 보이지 않도록 함
- OnlyRelevantToOwner
- 오너 엑터에게만 연관성을 가짐, 다른 액터(플레이어)는 연관성이 없으므로 복제되지 않게됨.
- ex)네비게이션이처럼 길을 알려주는 액터. 이는 다른 플레이어에게 보일 필요가 없음.
- NetCullDistance
- 뷰어와의 거리에 따라 연관성을 결정하도록 설정하는 값.
- 예시로 가까운 거리에서 디테일을 표현하는 액터등에 사용, 먼 거리에 나뭇잎표현을 위한 액터가 있다면 부하가 가중될것
- SetNetCullDistanceSquared 함수로 설정하는데, 이름에서나왔듯 1000거리를 지정하려면 제곱을 넣어주어야함(1000^2)
폰 클래스의 연관성을 판단하는 기준
- Viewer
- 클라이언트 커넥션이 소유하고 있는 플레이어 컨트롤러를 말한다.
- ViewTarget
- 플레이어가 빙의한(Posessed) 폰.
- Viewer에 의해 빙의된 ViewTarget이 레벨내에서 움직이는것이다.
즉 위에서 언급된 액터 클래스의 연관성 기준들은 ViewTarget과의 연관성이 있느냐가 중요한 것
NetPriority
언리얼 자체에서 네트워크로 데이터를 보낼때 우선도를 결정하는 값.
값이 높을수록 우선적으로 복제되고
일반적인, 쾌적한 상태에서는 NetPriority가 높은 순서대로 정렬되어 복제가 된다,.

NetDormancy
네트워크 휴면 상태를 나타내는 값
Replicate설정된 액터지만 자주 수정되지 않는 액터에게 설정하여 네트워크를 최적화할 수 있는 수단.
네트워크 휴면 상태 종류(공식문서에서 가져옴)
| DORM_Never |
이 액터는 휴면 상태가 되지 않습니다.
이는 휴면 상태 시스템에 의해 강제되지 않습니다.
ENetDormancy::DORM_Never 로 표시된 액터는 휴면 상태로 만들 수 있습니다. |
| DORM_Awake | 이 액터는 휴면 상태가 아니며 리플리케이션 대상으로 고려됩니다. |
| DORM_DormantPartial (Deprecated) |
이 액터는 모든 연결이 아닌 일부 연결에 대해 휴면 상태입니다.
AActor::GetNetDormancy 를 사용하여 액터가 휴면 상태인 연결을 확인할 수 있습니다. 부분 휴면 상태는 사용하지 않는 것이 좋습니다.
부분 휴면 상태는 폐기될 예정입니다. |
| DORM_Initial |
이 액터는 초기에 모든 연결에 대해 휴면 상태입니다.
초기에 맵에 배치된 액터에만 이 스테이트를 사용해야 합니다.
|
| DORM_DormantAll | 이 액터는 모든 연결에 대해 휴면 상태입니다. |
값 갱신이 자주 되지 않는 액터에 대해서 Dormancy를 통해 복제 대상에서 제외(휴먼)설정 및 깨우기 설정을 하여
네트워크 사용을 최적화 하는것이 핵심이다.
관련 핵심 함수는
SetNetDormancy(ENetDormancy) : 휴먼 상태를 설정. 단 런타임에서 Initial으로는 설정하면 안됨
FlushNetDormancy() : 일회성 액터 깨우기(한번의 Replicate발생). 호출 후 값을 변경해주면, 타음 틱이벤트에서 리플리케이트시 해당 액터가 고려되며, 그 이후 다시 휴먼(DORM_DormantAll)상태로 돌아간다.
주의 휴먼 상태로 전환에 대해 주의할 부분으로
공식 문서에서는 휴먼상태로 변경에 대해 이렇게 설명한다.
액터의 휴면 상태가 플러시된 후나 액터가 깨어나고 나서 휴면 상태로 설정할 경우, 해당 액터는 즉시 휴면 상태가 되지 않으므로 여러 업데이트를 전송할 수 있습니다. 해당 액터는 그 대신 해당 액터와 액터의 서브오브젝트에 전송되어야 할 확인되지 않은 변경사항이 더 이상 없을 때까지 계속 리플리케이트합니다. 휴면 상태 이력 현상을 활성화하는 경우에도, 액터가 즉시 휴면 상태가 되지 않습니다(UActorChannel::ReadyForDormancy 및 FObjectReplicator::ReadyForDormancy 참조).
밑줄 친 부분이 핵심인데, 액터가 계속해서 값이 변경되고 복제되어야 하는 경우에 의도적으로 휴먼상태로 돌아가게 할 수 없다.
dormancyhysteresis라는 값이 내부에 존재하는데, 마지막으로 복제된 시점으로부터 일정시간이 지나야 진짜 휴먼상태로 돌아가는것으로 보인다.
'개발 > 내일배움캠프' 카테고리의 다른 글
| Replicates 설정과 NetLoadOnClient속성 (0) | 2026.06.16 |
|---|---|
| 언리얼 RPC 이해하기2 (0) | 2026.06.09 |
| 언리얼 RPC 기초 정리 (0) | 2026.06.04 |
| 언리얼 네트워크 기초 정리 (0) | 2026.06.02 |
| 언리얼 멀티플레이어 개발전 설정들 (0) | 2026.06.01 |