Coding/Unity, C#

[Unity / Mirror] Authority

Network Authority

Authority(소유권)는 어떤 오브젝트를 누가 소유할 지 결정한다.

 

Server Authority

Server Authority는 서버가 오브젝트의 소유 권한을 가지고 있다는 의미다. 기본적으로 오브젝트의 소유 권한은 서버에게 있다. 예를 들어 수집할 수 있는 아이템, 움직이는 플랫폼, NPC 등이 있다.

 

Client Authority

Client Authority는 client가 오브젝트의 소유 권한을 가지고 있다는 뜻이다. 이 때, 소유 권한이라는 건 Client가 Commands를 호출할 수 있고 Client가 서버에서 나가면 그 물건들도 함께 사라진다는 걸 의미한다.

Client Authority이더라도 Server는 여전히 오브젝트의 SyncVar 와 serialization features를 컨트롤한다. 이런 것들은 Commands 를 통해 지속적으로 업데이트해서 다른 Client와 싱크를 맞춰줘야 한다.

 

How to give authority

기본적으로 오브젝트의 authority는 서버가 가진다. 서버는 이 authority를 client에 넘겨줄 수 있다. 참고로, 플레이어를 만들어내면 그 오브젝트는 당연히 플레이어 소유다.

/* Using NetworkServer.Spawn
** =========================
** 아이템을 생성하면서 바로 소유권을 준다.
*/
GameObject go = Instantiate(prefab);
NetworkServer.Spawn(go, connectionToClient);

/* Using identity.AssignClientAuthority
** =========================
** 일반적으로 줄 때는 아래 함수를 쓰면 된다.
*/
void CmdPickupItem(NetworkIdentity item)
{
  item.AssignClientAuthority(connectionToClient);
}

/* Remove authority
** =====================
** 부여된 소유권을 도로 불러들인다.
*/
identity.RemoveClientAuthority();

 

Authority Event

Authority가 Client에게 부여되거나 삭제될 때, Client에게 메세지가 간다. 각각 OnStartAuthorityOnStopAuthority 가 호출된다.

 

Check Authority

Authority가 있는지 검사할 때는 각각 identity.hasAuthority 또는 identity.connectionToClient 를 쓰면 된다.

'Coding > Unity, C#' 카테고리의 다른 글

Unity : Addressable Asset System  (0) 2021.03.02
Unity, Design Pattern: Command Pattern  (0) 2021.02.25
Unity : Virtual, Abstract, Interface  (0) 2021.02.23
[Unity] Save, Load  (0) 2021.02.23
Unity : Built-in Pipeline, Forward Rendering Path  (0) 2021.02.16