Version: 2019.3
언어: 한국어
커스텀 스폰 함수
상태 동기화

네트워크 권한

참고: UNet은 지원이 중단되었으며 향후 Unity에서 삭제될 예정입니다. 현재 새로운 시스템이 개발 중입니다. 자세한 내용과 다음 단계는 이 블로그 포스트FAQ를 참조하십시오.

서버와 클라이언트 모두 게임 오브젝트의 동작을 관리할 수 있습니다. “권한”의 개념은 게임 오브젝트의 관리 방식 및 장소를 나타냅니다.

서버 권한

HLAPI를 사용하는 Unity 네트워크 연결 게임의 기본 권한 상태에서는 서버가 플레이어를 나타내지 않는 모든 게임 오브젝트에 대한 권한을 보유합니다. 즉, 서버는 모든 수집 가능 아이템, 이동 가능 플랫폼, NPC 그리고 플레이어가 상호작용할 수 있는 기타 게임 요소를 제어하고, 플레이어 게임 오브젝트는 해당 소유자의 클라이언트에 대한 권한을 보유(클라이언트가 해당 동작을 관리)합니다.

로컬 권한

로컬 권한(때때로 클라이언트 권한으로 지칭됨)은 네트워크로 연결된 특정 게임 오브젝트에 대한 로컬 클라이언트의 권한을 의미입니다. 이 권한은 서버가 네트워크로 연결된 게임 오브젝트를 관리하는 기본 상태와 반대됩니다.

isLocalPlayer**** 외에도 플레이어 게임 오브젝트가 “로컬 권한”을 보유하도록 만들 수 있습니다. 다시 말해, 해당 클라이언트의 플레이어 게임 오브젝트가 자체적으로 권한을 관리합니다. 이는 이동을 제어하는 데 특히 유용하며, 각 클라이언트가 해당 플레이어 게임 오브젝트의 제어 방식에 대한 권한을 갖는다는 것을 의미합니다.

게임 오브젝트에 대한 로컬 플레이어 권한을 활성화하려면 Network Identity 컴포넌트의 Local Player Authority 체크박스를 선택하십시오. Network Transform 컴포넌트는 이 “권한” 설정을 사용하고, 이 권한이 설정된 경우 이동 정보를 해당 클라이언트에서 다른 클라이언트로 전송합니다.

스크립트를 통해 로컬 플레이어 권한을 부여하는 방법은 NetworkIdentitylocalPlayerAuthority에 대한 스크립팅 API 레퍼런스 문서를 참조하십시오.

이 이미지는 서버 권한 하에 있는 적 오브젝트를 보여줍니다. 적은 클라이언트 1과 클라이언트 2에 나타나지만, 적의 위치, 이동 및 동작은 해당 서버가 제어합니다.
이 이미지는 서버 권한 하에 있는 적 오브젝트를 보여줍니다. 적은 클라이언트 1과 클라이언트 2에 나타나지만, 적의 위치, 이동 및 동작은 해당 서버가 제어합니다.

NetworkIdentity.hasAuthority 프로퍼티를 사용하여 게임 오브젝트에 로컬 권한이 있는지 그리고 NetworkBehaviour에 간편하게 액세스할 수 있는지 여부를 확인하십시오. 논플레이어 게임 오브젝트는 서버에 대한 권한을 보유하고, localPlayerAuthority가 설정된 플레이어 게임 오브젝트는 해당 소유자의 클라이언트에 대한 권한을 보유합니다.

논플레이어 게임 오브젝트의 로컬(클라이언트) 권한

다음의 두 가지 방법으로 논플레이어 게임 오브젝트에 대한 클라이언트 권한을 보유할 수 있습니다. 하나는 NetworkServer.SpawnWithClientAuthority로 게임 오브젝트를 스폰한 후 클라이언트 네트워크 연결에 전달하여 소유권을 이전하는 방법입니다. 다른 하나는 NetworkIdentity.AssignClientAuthority를 클라이언트 네트워크 연결과 함께 사용하여 소유권을 이전하는 방법입니다.

클라이언트에 권한을 할당하면 Unity는 게임 오브젝트의 각 NetworkBehaviour에 대한 OnStartAuthority()를 호출하고, hasAuthority** 프로퍼티를 true로 설정합니다. 다른 클라이언트의 hasAuthority **프로퍼티는 계속 false로 남습니다. 클라이언트 권한이 있는 논플레이어 게임 오브젝트는 플레이어와 같이 커맨드를 보낼 수 있습니다. 이 커맨드는 게임 오브젝트의 서버 인스턴스에서 실행되며, 연결에 관련된 플레이어 서버에서 실행되지 않습니다.

논플레이어 게임 오브젝트가 클라이언트 권한을 보유하도록 하려면 해당 Network Identity 컴포넌트에서 localPlayerAuthority를 활성화해야 합니다. 아래 예제에서는 게임 오브젝트가 스폰되고, 해당 게임 오브젝트를 스폰한 플레이어의 클라이언트에 권한이 할당됩니다.

[Command]
void CmdSpawn()
{
    var go = (GameObject)Instantiate(otherPrefab, transform.position + new Vector3(0,1,0), Quaternion.identity);
    NetworkServer.SpawnWithClientAuthority(go, connectionToClient);
}

네트워크 컨텍스트 프로퍼티

NetworkBehaviour 클래스에는 스크립트가 네트워크로 연결된 게임 오브젝트의 컨텍스트를 항상 파악할 수 있도록 하는 프로퍼티가 있습니다.

  • isServer - 게임 오브젝트가 스폰되었고 서버나 호스트에 있는 경우 true입니다.

  • isClient - 게임 오브젝트가 서버에 의해 생성되었고 클라이언트에 있는 경우 true입니다.

  • isLocalPlayer - 게임 오브젝트가 이 클라이언트의 플레이어 게임 오브젝트인 경우 true입니다.

  • hasAuthority - 로컬 프로세스가 이 게임 오브젝트를 소유하는 경우 true입니다.

이러한 프로퍼티를 확인하려면 검사하려는 게임 오브젝트를 선택하고, Inspector 창에서 NetworkBehaviour 스크립팅 컴포넌트에 대한 미리보기 창을 살펴보십시오. 해당 프로퍼티의 값을 사용하여 스크립트가 실행 중인 컨텍스트를 기반으로 하는 코드를 실행할 수 있습니다.

커스텀 스폰 함수
상태 동기화