참고: UNet은 지원이 중단되었으며 향후 Unity에서 삭제될 예정입니다. 현재 새로운 시스템이 개발 중입니다. 자세한 내용과 다음 단계는 이 블로그 포스트를 참조하십시오. |
Unity 멀티플레이어 시스템에는 두 가지 타입의 네트워크로 연결된 게임 오브젝트가 있습니다.
런타임 시점에 동적으로 생성되는 게임 오브젝트
씬의 일부로 저장되는 게임 오브젝트
런타임 시점에 동적으로 생성되는 게임 오브젝트는 멀티플레이어 스폰 시스템을 사용하며, 인스턴스화되는 프리팹은 네트워크 관리자의 네트워크로 연결된 게임 오브젝트 프리팹 리스트에 등록해야 합니다.
하지만 씬의 일부로 저장해서 로드 시 씬에 이미 포함되어 있는 네트워크로 연결된 게임 오브젝트는 다른 방식으로 처리됩니다. 이러한 게임 오브젝트는 클라이언트와 서버에서 씬의 일부로 로드되며, 멀티플레이어 시스템에서 스폰 메시지를 보내기 전 런타임 시점에서 존재합니다.
씬이 로드될 때 ** **클라이언트와 서버 모두에서 씬에 있는 네트워크로 연결된 게임 오브젝트가 모두 비활성화됩니다. 그러면 씬이 완전히 로드될 때 네트워크 관리자가 씬에 있는 네트워크로 연결된 게임 오브젝트를 자동으로 처리하여 전부 등록(이를 통해 클라이언트 간에 동기화가 발생함)하고 활성화합니다. 이는 런타임 시점에 스폰될 때와 유사합니다.
씬을 로드한 후에 네트워크로 연결된 게임 오브젝트를 동적으로 스폰하지 않고 씬에 저장하면 다음과 같은 장점이 있습니다.
네트워크 관리자가 네트워크로 연결된 씬 게임 오브젝트를 스폰하는 경우 해당 게임 오브젝트는 동적으로 스폰된 게임 오브젝트처럼 동작합니다. Unity는 이 게임 오브젝트에 업데이트와 ClientRPC 호출을 보냅니다.
클라이언트가 게임에 참가하기 전에 씬 게임 오브젝트가 서버에서 삭제되면 참가한 새 클라이언트에서 활성화되지 않습니다.
클라이언트가 연결되면 서버에 존재하고 클라이언트에 보이는 각 씬 게임 오브젝트에 대해 ObjectSpawnScene 스폰 메시지가 클라이언트로 전송됩니다. 이 메시지로 인해 클라이언트에 있는 게임 오브젝트가 활성화되고, 메시지에는 서버에서 전송된 해당 게임 오브젝트의 최신 상태가 포함됩니다. 다시 말해, 클라이언트에 보이고 서버에서 삭제되지 않은 게임 오브젝트만 클라이언트에서 활성화됩니다. 이런 씬 게임 오브젝트는 다른 일반적인 게임 오브젝트처럼 클라이언트가 게임에 참가할 때 최신 상태로 시작됩니다.