네트워크 게임플레이에서 액터의 롤과 원격 롤은 어떤 머신이 액터의 스테이트를 변경하고 원격 프로시저 호출을 수행할 권한을 갖는지 결정합니다. 이러한 프로퍼티를 사용하면 멀티플레이어 게임의 액터에 대해 다음 질문에 답변할 수 있습니다.
이 액터가 리플리케이트되었나요?
이 액터에 대한 권한은 누가 가지고 있나요?
이 액터의 리플리케이션 롤은 무엇인가요?
액터 롤과 원격 롤은 소유권과 같지 않습니다! 자세한 내용은 액터와 그 접속 소유를 참고하세요.
액터 롤 및 원격 롤 보기
언리얼 에디터의 세부 정보 패널에서 액터의 현재 롤과 원격 롤을 확인할 수 있습니다.
액터의 롤 및 원격 롤은 C++ 또는 블루프린트에서도 얻을 수 있습니다.
액터 롤 가져오기
이 액터에 대한 로컬 머신의 제어 권한을 확인하려면 AActor::GetLocalRole을 호출합니다.
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole LocalRole = MyActor->GetLocalRole();
// LocalRole contains the Actor's Role
...액터의 원격 롤 가져오기
이 액터에 대한 원격 머신의 제어 권한을 확인하려면 AActor::GetRemoteRole을 호출합니다.
AMyActor* MyActor;
...
// Once you have a valid Actor pointer...
const ENetRole RemoteRole = MyActor->GetRemoteRole();
// RemoteRole contains the Actor's RemoteRole
...액터 롤 스테이트
액터 롤과 원격 롤은 ENetRole 열거형 클래스(EngineTypes.h에 정의됨)의 스테이트로 표현됩니다. 다음 표에서 스테이트의 리스트와 설명을 확인할 수 있습니다.
| 네트 롤 스테이트 | 설명 |
|---|---|
| 롤이 없습니다. 이 액터는 리플리케이트되지 않습니다. |
| 이 액터의 시뮬레이션 프록시입니다. 이 액터는 실제 스테이트를 시뮬레이션하지만 스테이트를 변경하거나 원격 함수를 호출할 권한이 없습니다. |
| 이 액터의 자율 프록시입니다. 이 액터는 실제 스테이트를 시뮬레이션하고, 스테이트를 변경하고 원격 함수를 호출할 권한이 있습니다. |
| 이 액터에 대한 컨트롤 권한입니다. 이 액터는 네트워킹의 실제 상태를 유지하며, 상태를 변경하고 함수를 호출할 권한이 있습니다. 이 액터는 또한 프로퍼티 변경 사항을 추적하고 이를 리플리케이트하여 연결된 클라이언트에 전송하는 것을 담당합니다. |
클라이언트-서버 롤 매트릭스
언리얼 엔진은 네트워킹에 클라이언트-서버 모델을 사용합니다. 그 결과, 서버는 리플리케이트된 액터에 대해 항상 권한을 가집니다. 이는 리플리케이트된 액터의 경우 서버만 ROLE_Authority를 볼 수 있어야 함을 의미합니다. 리플리케이트되지 않은 액터는 클라이언트에서 ROLE_Authority의 로컬 롤을 가질 수 있으며, 원격 롤은 ROLE_None입니다.
다음 표에서 로컬 롤과 원격 롤의 매트릭스, 서버 또는 클라이언트가 이 롤 조합을 확인하는지 여부, 그리고 이 조합이 무엇을 의미하는지에 대한 설명을 확인할 수 있습니다.
| 로컬 롤 | 원격 롤 | 서버 또는 클라이언트 | 설명 |
|---|---|---|---|
|
| 서버 | 이 액터 폰은 연결된 클라이언트 중 하나에 의해 제어됩니다. |
|
| 클라이언트 | 이 액터 폰은 연결된 이 클라이언트가 제어합니다. |
|
| 클라이언트 | 이 액터 폰은 연결된 다른 클라이언트 중 하나에 의해 제어됩니다. 어떤 클라이언트의 제어도 받지 않는 리플리케이트된 액터도 이 롤 조합을 가질 수 있습니다. |
|
| 클라이언트 | 리플리케이트되지 않은 액터입니다. |
액터 리플리케이션 시뮬레이션
서버는 모든 업데이트마다 모든 액터를 리플리케이트하지 않습니다. 그렇게 하면 너무 많은 대역폭과 CPU 리소스가 필요하기 때문입니다. 대신 서버는 AActor::NetUpdateFrequency 프로퍼티에 지정된 빈도로 액터를 리플리케이트합니다. 이는 액터 업데이트 사이에 클라이언트에서 약간의 시간이 흐른다는 것을 의미합니다. 이로 인해 캐릭터 무브먼트 컴포넌트가 있는 액터가 끊기고 불규칙하게 보일 수 있습니다. 이를 보완하기 위해 클라이언트는 업데이트 사이에 캐릭터 무브먼트를 시뮬레이션합니다.
리플리케이션 시뮬레이션 및 캐릭터 무브먼트에 대한 자세한 정보는 캐릭터 무브먼트 컴포넌트의 네트워킹된 무브먼트 문서를 참조하세요.
롤 및 원격 롤 참조
함수
| 이름 | 설명 |
|---|---|
다른 액터에서 원격 롤을 복사하고 필요한 경우 이 액터를 네트워크 액터 목록에 추가합니다. | |
클라이언트에서 실행 중인 경우 롤과 원격 롤을 바꿉니다. | |
이 액터에 대한 로컬 머신의 제어 권한을 반환합니다. | |
이 액터에 대한 원격 머신의 제어 권한을 반환합니다. | |
롤에 대한 프로퍼티 이름을 가져옵니다. | |
true인 경우, 이 액터는 더 이상 새 클라이언트로 리플리케이트되지 않으며, 리플리케이트되던 클라이언트에서 "분리"됩니다( | |
원격 머신으로부터 새로운 롤을 수신한 직후에 호출됩니다. | |
이전 버전과의 호환성을 위해 원격 롤을 설정해야 하는 클래스의 생성자에서 사용됩니다. | |
이 인스턴스에 다른 사이드 이펙트를 일으키지 않고 롤의 값을 설정하세요. | |
이 액터의 롤과 원격 롤을 바꿉니다. 주의: 부작용을 이해하고 있는 경우에만 이 함수를 호출하세요. |
프로퍼티
| 이름 | 설명 |
|---|---|
클라이언트에서 롤과 원격 롤이 교환되었는지 여부입니다. |