네트워크로 연결된 게임 오브젝트
커스텀 플레이어 스포닝

플레이어 게임 오브젝트

Unity 멀티플레이어 HLAPI 시스템은 플레이어 게임 오브젝트를 논플레이어 게임 오브젝트와 다르게 처리합니다. 새 플레이어가 게임에 참가하면, 즉 새 클라이언트가 서버에 연결되면 해당 플레이어의 게임 오브젝트는 해당 플레이어의 클라이언트에서 “로컬 플레이어” 게임 오브젝트가 되고, Unity는 플레이어의 연결을 플레이어의 게임 오브젝트와 연관짓습니다. Unity는 게임 플레이어 한 명당 하나의 플레이어 게임 오브젝트를 연결하고, 네트워크 커맨드를 해당 개별 게임 오브젝트로 라우팅합니다. 플레이어는 다른 플레이어가 아닌 자신의 게임 오브젝트에 대해서만 커맨드를 호출할 수 있습니다.

NetworkBehaviour 클래스(네트워크 스크립트를 생성할 때 여기서 파생됨)에는 isLocalPlayer 프로퍼티가 있습니다. 각 클라이언트의 플레이어 게임 오브젝트에서 Unity는 NetworkBehaviour 스크립트에서 해당 프로퍼티를 true로 설정하고 OnStartLocalPlayer() 콜백을 호출합니다. 다시 말해, 각 클라이언트에는 이렇게 설정된 다른 게임 오브젝트가 있습니다. 이는 각 클라이언트에서 다른 게임 오브젝트가 로컬 플레이어를 나타내기 때문입니다. 아래 다이어그램에는 두 개의 클라이언트와 해당 로컬 플레이어가 나와 있습니다.

이 다이어그램에서 원은 각 클라이언트에서 로컬 플레이어로 표시된 플레이어 게임 오브젝트를 나타냄
이 다이어그램에서 원은 각 클라이언트에서 로컬 플레이어로 표시된 플레이어 게임 오브젝트를 나타냄

플레이어 관점에서 볼 때 “해당 플레이어의” 플레이어 게임 오브젝트에만 isLocalPlayer** **플래그가 설정되어 있습니다. 일반적으로 이 플래그를 스크립트에 설정하여 입력 처리 및 카메라의 게임 오브젝트 추적 여부를 결정하고, 해당 클라이언트에 속한 플레이어에게만 발생해야 하는 클라이언트 측면 동작들을 수행합니다.

플레이어 게임 오브젝트는 서버에서 플레이어(게임을 플레이하는 사람)를 나타내며, 플레이어의 클라이언트에서 커맨드를 실행할 수 있습니다. 이러한 커맨드는 안전한 클라이언트-서버 원격 프로시저 호출입니다. 이 서버 권한 시스템에서 서버의 다른 논플레이어 게임 오브젝트는 클라이언트의 게임 오브젝트로부터 직접 커맨드를 수신할 수 없습니다. 이는 보안을 유지하고 게임 빌드의 복잡도를 줄이기 위한 것입니다. 플레이어 게임 오브젝트를 통해 사용자로부터 들어오는 모든 커맨드를 라우팅하면 이러한 메시지가 올바른 위치와 올바른 클라이언트에서 오는지 확인하고 중앙에서 처리할 수 있습니다.

Network Manager는 클라이언트가 서버에 연결할 때마다 플레이어를 추가합니다. 하지만 일부 상황에서는 입력 이벤트(예: 사용자가 컨트롤러의 “시작” 버튼을 누름)가 발생할 때까지 플레이어를 추가하고 싶지 않을 수도 있습니다. 자동 플레이어 생성을 비활성화하려면 Network Manager 컴포넌트의 인스펙터로 이동해서 플레이어 자동 생성(Auto Create Player) 체크박스를 선택 해제하십시오.

네트워크로 연결된 게임 오브젝트
커스텀 플레이어 스포닝