Version: 2017.2
로컬 디스커버리
싱글 플레이어 게임을 Unity 멀티플레이어 게임으로 전환

씬 오브젝트(Scene Objects)

동적으로 생성되는 오브젝트는 NetworkServer.Spawn()을 사용하여 네트워크에 추가되지만, 씬에 이미 있는 오브젝트는 다르게 처리됩니다. 이러한 오브젝트는 클라이언트와 서버에 모두 씬과 함께 로드되고, 스폰 메시지가 전송되기 전에 런타임 시점에 존재합니다.

NetworkIdentity 컴포넌트가 있는 씬의 모든 오브젝트는 씬이 로드될 때 클라이언트와 서버에서 모두 비활성화됩니다. 그 후 씬이 완전히 로드되면 NetworkServer.SpawnObjects()가 호출되어 네트워크로 연결된 씬 오브젝트가 활성화됩니다. 이 작업은 서버 씬 로드가 완료되면 NetworkManager가 자동으로 수행하거나 사용자 코드에서 직접 호출할 수 있습니다. 그러면 새 인스턴스를 만드는 대신 기존 인스턴스를 네트워크에 연결하는 특수한 방식으로 네트워크로 연결된 씬 오브젝트가 스폰됩니다.

동적으로 스폰되는 오브젝트 대신 씬 오브젝트를 사용하는 좋은 이유가 몇 가지 있습니다. 이러한 오브젝트는 다음과 같은 특성을 지닙니다.

  • 레벨과 함께 로드되므로 런타임 시점에 일시 중지되지 않습니다.
  • 프리팹과 다른 특정 수정사항을 포함할 수 있습니다.
  • 씬의 다른 오브젝트 인스턴스에서 참조될 수 있으므로 오브젝트를 찾아서 런타임 시점에 연결할 필요가 없습니다.

NetworkServer.SpawnObjects()를 통해 씬 오브젝트가 스폰된 후에는 다른 모든 스폰된 오브젝트처럼 동작합니다. 업데이트가 전송되고 ClientRPC 호출을 수행할 수 있습니다.

클라이언트가 게임에 참가하기 전에 씬의 오브젝트가 서버에서 삭제되면 참가한 새 클라이언트에서 오브젝트가 스폰되지 않습니다.

네트워크로 연결된 씬 오브젝트는 네트워크가 시작될 때 비활성화됩니다. 씬에 NetworkIdentity가 있는 씬 오브젝트는 네트워크로 연결된 씬 오브젝트입니다.

다음, 이런 오브젝트는 서버에서 NetworkServer.SpawnObjects()가 호출되는 시점인 서버가 시작될 때나 서버에 씬을 로드하는 작업이 완료될 때 활성화됩니다. 클라이언트가 연결되면 서버에 있고 클라이언트에 보이는 각 씬 오브젝트에 대해 ObjectSpawnScene 스폰 메시지가 클라이언트로 전송됩니다. 이 메시지로 인해 클라이언트에 있는 오브젝트가 활성화되고, 메시지에는 서버에서 전송된 해당 오브젝트의 최신 상태가 포함됩니다. 따라서 클라이언트에 보이고 서버에서 삭제되지 않은 오브젝트만 클라이언트에서 활성화됩니다. 이런 씬 오브젝트는 다른 일반적인 오브젝트처럼 클라이언트가 게임에 참가할 때 최신 상태로 시작됩니다.

로컬 디스커버리
싱글 플레이어 게임을 Unity 멀티플레이어 게임으로 전환