Actor의 Role: NetRole
1. 정의
- NetRole: 현재 객체(Actor)의 네트워크 역할(권한 수준) 확인
- 권한 수준 확인 목적
: 게임 버전 및 모든 로직에 대한 유효성을 판별하여 관리 감독 권한(Authority)을 통한 안전성과 신뢰성 확보
2. 종류
1) LocalRole
(1) 정의
- 현재 실행 중인 인스턴스(로컬 환경)에서의 Actor 역할
(2) 값
- ROLE_None
• 정의: 네트워크와 관련 역할이 없는 상태
• 특징
: 네트워크 상에서 역할이 필요없거나 관계 없는 객체에서 사용
→ 네트워크 권한이 없기 때문에 네트워크 동기화가 발생하지 않음
: 주로 로컬에서만 사용하는 객체
- ROLE_SimulatedProxy
*Proxy(복제): 클라이언트는 서버에서 복제된 것을 받아 사용
• 정의: 이 인스턴스에서 시뮬레이션만 수행
• 특징
: 서버에서 Actor가 클라이언트에 전송됐을 때 클라이언트에서 객체를 시뮬레이션 하기 위해 사용
→ 서버의 데이터를 받아 클라이언트 쪽에서 로컬로 시뮬레이션 하기 때문에 네트워크 동기화 발생
→ 클라이언트는 객체에 대한 시뮬레이션만 담당하기에 실제 데이터 관리/권한은 서버에서 발생
- ROLE_AutonomousProxy
• 정의: 클라이언트가 직접 제어하는 객체(Actor)
• 특징
: 클라이언트에서 객체를 직접 제어하기 때문에 객체에 대한 입력 / 동작 처리
: 클라이언트에서 서버로 객체에 대한 상태를 전송하면 서버가 변경된 객체의 상태를 확인해 네트워크 동기화
- ROLE_Authority
• 정의: 서버에서 객체를 소유해 해당 객체의 상태 관리
• 특징
: 서버가 객체에 대한 모든 권한을 가지고 상태를 처리해 클라이언트 서버에 필요한 정보 전달
: 서버에서 클라이언트서버로 상태 전송 / 클라이언트서버에서 받은 정보 검증해 동기화
(3) 특징
- 로컬Role 기준으로 서버에 있는 모든 Actor는 기본적으로 Role_Authority를 가짐
: 서버가 모든 Actor의 소유권과 상태관리 권한을 기본적으로 가지고 있음
- 서버 간 객체에 대한 Role 상이
객체 위치 / 보는 서버 | 서버 | '내' 클라이언트 서버 | '다른' 클라이언트 서버 |
서버 | ROLE_Authority | ROLE_SimulatedProxy | ROLE_SimulatedProxy |
'내' 클라이언트 서버 | ROLE_Authority | ROLE_AutonomousProxy | ROLE_SimulatedProxy |
'다른' 클라이언트 서버 | ROLE_Authority | ROLE_SimulatedProxy | ROLE_AutonomousProxy |
* 이 클라이언트는 상대방의 입장에서 자기자신의 서버라고 가정
2) RemoteRole
(1) 정의
- 원격 네트워크 인스턴스(서버)에서의 Actor의 역할
(2) 값
- ROLE_None
• 정의: 원격 Actor가 없음
• 특징
: 네트워크 상에서 역할이 필요없거나 관계 없는 객체에서 사용
→ 네트워크 권한이 없기 때문에 네트워크 동기화가 발생하지 않음
: 주로 비네트워크 객체 / 게임 플레이와 직접 연결되지 않은 객체
- ROLE_SimulatedProxy
• 정의: 서버의 Actor를 클라이언트에서 시뮬레이션
• 특징
: 클라이언트 서버에서는 상태만 시뮬레이션 가능하며, 객체에 대한 권한 / 입력 처리 불가
: 서버에서 해당 객체에 대한 상태 유지
- ROLE_AutonomousProxy
• 정의: 클라이언트 서버에서 Actor를 자율적으로 제어
• 특징
: 클라이언트에서 객체에 대한 직접 제어 및 입력 처리
: 서버에서 해당 객체에 대한 상태를 클라이언트 서버로부터 수신해 상태가 일관되도록 관리
- ROLE_Authority
• 정의: 서버에서 Actor에 대한 모든 권한 소유
• 특징
: 서버에서 권한을 가진 객체는 모두 ROLE_Authority 소유
: 서버에서 객체에 대한 상태를 최종적으로 제어하기에 클라이언트 서버에서는 서버에서 수신한 상태를 받아 시뮬레이션만 가능
3) LocalRole과 RemoteRole 비교
구분 | LocalRole | RemoteRole |
정의 | 현재 인스턴스(로컬)에서 객체(Actor)가 수행 중인 역할 | 원격 인스턴스(서버)에서 객체(Actor)가 수행중인 역할 |
값 | Role_None, Role_SimulatedProxy, Role_AutonomousProxy, Role_Authority | |
적용관점 | 로컬 인스턴스 기준으로 Actor의 네트워크 권한 확인 | 원격 Actor의 상태 동기화 / 시뮬레이션 관리 |
사용목적 | 로컬 환경에서 권한에 따른 작업 수행 | 원격 환경에서의 Actor 동작 확인 및 동기화 |
결정시점 | 로컬에서 Actor의 네트워크 역할 결정 | 서버의 Actor가 로컬에 전달될 때 역할 결정 |
4) LocalRole과 RemoteRole 실제 적용
(1) 뷰포트 = 서버
(2) Network 프리뷰 = 각각의 클라이언트