Unity 멀티플레이어 HLAPI 시스템은 플레이어 게임 오브젝트를 비플레이어 게임 오브젝트와 다르게 처리합니다. 새 플레이어가 게임에 참가하면, 즉 새 클라이언트가 서버에 연결되면 해당 플레이어의 게임 오브젝트는 해당 플레이어의 클라이언트에서 “로컬 플레이어” 게임 오브젝트가 되고, Unity는 플레이어의 연결을 플레이어의 게임 오브젝트와 연관짓습니다. Unity는 게임 플레이어 한 명당 하나의 플레이어 게임 오브젝트를 연결하고, 네트워크 커맨드를 해당 개별 게임 오브젝트로 라우팅합니다. 플레이어는 다른 플레이어가 아닌 자신의 게임 오브젝트에 대해서만 커맨드를 호출할 수 있습니다.
NetworkBehaviour 클래스(네트워크 스크립트를 생성할 때 여기서 파생됨)에는 isLocalPlayer 프로퍼티가 있습니다. 각 클라이언트의 플레이어 게임 오브젝트에서 Unity는 NetworkBehaviour 스크립트에서 해당 프로퍼티를 true로 설정하고 OnStartLocalPlayer() 콜백을 호출합니다. 다시 말해, 각 클라이언트에는 이렇게 설정된 다른 게임 오브젝트가 있습니다. 이는 각 클라이언트에서 다른 게임 오브젝트가 로컬 플레이어를 나타내기 때문입니다. 아래 다이어그램에는 두 개의 클라이언트와 해당 로컬 플레이어가 나와 있습니다.
플레이어 관점에서 볼 때 “해당 플레이어의” 플레이어 게임 오브젝트에만 isLocalPlayer
** **플래그가 설정되어 있습니다. 일반적으로 이 플래그를 스크립트에 설정하여 입력 처리 및 카메라의 게임 오브젝트 추적 여부를 결정하고, 해당 클라이언트에 속한 플레이어에게만 발생해야 하는 클라이언트 측면 동작들을 수행합니다.
플레이어 게임 오브젝트는 서버에서 플레이어(게임을 플레이하는 사람)를 나타내며, 플레이어의 클라이언트에서 커맨드를 실행할 수 있습니다. 이러한 커맨드는 안전한 클라이언트-서버 원격 프로시저 호출입니다. 이 서버 권한 시스템에서 서버의 다른 비플레이어 게임 오브젝트는 클라이언트의 게임 오브젝트로부터 직접 커맨드를 수신할 수 없습니다. 이는 보안을 유지하고 게임 빌드의 복잡도를 줄이기 위한 것입니다. 플레이어 게임 오브젝트를 통해 사용자로부터 들어오는 모든 커맨드를 라우팅하면 이러한 메시지가 올바른 위치와 올바른 클라이언트에서 오는지 확인하고 중앙에서 처리할 수 있습니다.
네트워크 관리자는 클라이언트가 서버에 연결할 때마다 플레이어를 추가합니다. 하지만 특정 상황에서는 입력 이벤트(예: 사용자가 컨트롤러의 “시작” 버튼을 누름)가 발생할 때까지 플레이어를 추가하고 싶지 않을 수도 있습니다. 자동 플레이어 생성을 비활성화하려면 Network Manager 컴포넌트의 인스펙터로 이동해서 Auto Create Player 체크박스를 선택 해제하십시오.