티스토리 뷰
서버(Server) 측 콜백 메서드 순서
- Awake (Unity의 MonoBehaviour 메서드)
- 네트워크 관리자를 초기화할 때 사용됩니다.
- Start (Unity의 MonoBehaviour 메서드)
- 네트워크 관리자가 시작될 때 사용됩니다.
- OnStartServer
- 서버가 시작되었을 때 호출됩니다. 서버 초기화 작업을 수행하는 데 사용됩니다.
- 일반적으로 네트워크를 시작한 후 서버 준비 작업을 수행합니다.
- OnServerConnect(NetworkConnectionToClient conn)
- 클라이언트가 서버에 처음 연결될 때 호출됩니다.
- 클라이언트의 연결을 허용할지 또는 거부할지 결정할 수 있습니다.
- OnServerAddPlayer(NetworkConnectionToClient conn)
- 새 클라이언트가 연결된 후, 해당 클라이언트에 대한 플레이어 객체가 생성될 때 호출됩니다.
- 하지만 플레이어 객체의 Start()가 실행되기 전에 호출되는 것 같습니다.
- 플레이어 객체를 초기화하거나 게임에 추가하는 작업을 수행할 수 있습니다.
- OnRoomServerAddPlayer(NetworkConnectionToClient conn) (NetworkRoomManager를 상속한 경우)
- 클라이언트가 연결되고 룸 씬에서 룸 플레이어 객체가 생성될 때 호출됩니다.
- 룸 기반 게임의 경우, 룸 플레이어 객체의 설정을 관리합니다.
그런데 이 메서드를 호출하는 곳이 없다...!
- OnServerReady(NetworkConnectionToClient conn)
- 클라이언트가 준비 상태(ready)가 되었을 때 호출됩니다. 클라이언트가 씬을 로드하고 플레이어 객체를 제어할 준비가 되었음을 의미합니다.
- 게임에서 모든 클라이언트가 준비되었을 때 시작할 수 있도록 합니다.
- OnServerSceneChanged(string sceneName)
- 서버의 씬이 변경된 후 호출됩니다.
- 새로운 씬에서 필요한 초기화 작업을 수행합니다.
- NetworkRoomManager에선 OnRoomServerSceneChanged()가 마련되어 있습니다.
- if (sceneName == GameplayScene) 처럼 씬 이름과 비교하여 원하는 조건을 걸면 될 것 같습니다.
- OnServerDisconnect(NetworkConnectionToClient conn)
- 클라이언트가 서버에서 연결이 끊어질 때 호출됩니다.
- 클라이언트의 데이터 정리나 연결 해제 시 처리할 작업을 수행할 수 있습니다.
- StopClient()에서 호출 됩니다.
- OnStopServer
- 서버가 종료될 때 호출됩니다.
- 서버 종료 전 정리 작업을 수행합니다.
클라이언트(Client) 측 콜백 메서드 순서
- Awake (Unity의 MonoBehaviour 메서드)
- 네트워크 관리자를 초기화할 때 사용됩니다.
- Start (Unity의 MonoBehaviour 메서드)
- 네트워크 관리자가 시작될 때 사용됩니다.
- OnStartClient
- 클라이언트가 시작될 때 호출됩니다.
- 클라이언트 초기화 작업을 수행하는 데 사용됩니다.
- StartClient()에서 실행됩니다.
- OnClientConnect
- 클라이언트가 서버에 성공적으로 연결되었을 때 호출됩니다.
- 서버와 연결된 후 초기화 작업을 수행합니다.
- OnClientSceneChanged
- 서버에서 클라이언트로 씬 전환 명령이 보내진 후 클라이언트에서 씬이 변경되었을 때 호출됩니다.
- 새로운 씬에서 필요한 초기화 작업을 수행합니다.
- NetworkClient.AddPlayer()가 실행되는 곳입니다. 즉, 씬이 다 불러와지면 객체가 생성되나 봅니다.
- OnRoomClientSceneChanged
- 룸 씬에서 클라이언트가 씬 전환 명령을 받고 씬이 변경된 후 호출됩니다.
- 새로운 씬에서 룸 관련 객체 초기화 작업을 수행합니다.
- NetworkRoomManager의 메서드로써, 위의 OnClientSceneChanged 에서 실행됩니다.
- 일단은 비어있는 메서드이므로 자유롭게 써도 좋을 듯 싶습니다.
OnClientAddPlayer- 아쉽게도 이런 콜백 메서드는 없습니다.
- 대신 플레이어 객체의 Start를 활용할 수 있습니다.
- 하지만 네트워크 객체로써 더 정확한 타이밍은 NetworkBehaviour의 OnStartLocalPlayer()일 것입니다...
- OnClientDisconnect
- 클라이언트가 서버로부터 연결이 끊어졌을 때 호출됩니다.
- 연결이 끊어진 후 클라이언트에서 정리 작업을 수행합니다.
- OnRoomClientDisconnect
- NetworkRoomManager의 메서드로써, 위의 OnClientDisconnect에서 실행됩니다.
- OnStopClient
- 클라이언트가 종료될 때 호출됩니다.
- 클라이언트 종료 전 정리 작업을 수행합니다.
RoomManager를 사용하는 이유는
로비 씬과 인 게임 씬을 나누고
서버 연결 상태에 따라 씬 이동을 자동으로 하기 위해서일 것이다.
때문에 씬을 이동하는 과정에서 호출되는 콜백 함수를 정리하여 이해하고자 했다.
- 씬 이동 전:
- ServerChangeScene(string newSceneName)
- OnServerChangeScene(string newSceneName)
- OnServerChangeScene는 ServerChangeScene 안에 있는 메서드...
- 씬 이동 시작 시:
- OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
- 씬 이동 완료 후:
- OnServerSceneChanged(string sceneName)
- OnRoomServerSceneChanged(string sceneName) (오버라이드)
- OnClientSceneChanged(NetworkConnection conn)
'유니티 > Mirror' 카테고리의 다른 글
[Room Scene] ReadyToBegin에서 ServerChangeScene까지 (0) | 2024.09.01 |
---|---|
NetworkIdentity, SyncVar, Hook, Command 는 한 세트 (0) | 2024.08.30 |
[Unity Mirror] Do not use Start ! (0) | 2024.08.28 |