코드는 튜토리얼과 거의 같은상태에서 시작했다.
https://doc.photonengine.com/ko-kr/fusion/current/tutorials/host-mode-basics/overview
Fusion 2 개요 | Photon Engine
Fusion 호스트 모드 기초에 오신 것을 환영합니다. 유니티에서 Fusion SDK를 사용하여 실행할 수 있는 단계별 가이드입니다. 멀티플레이어 게임은 게임 디자인과 개발의 모든 측면에 복잡성을 더해
doc.photonengine.com
방 목록을 가져오려면
클래스
public class BasicSpawner : MonoBehaviour, INetworkRunnerCallbacks
public void OnSessionListUpdated(NetworkRunner runner, List<SessionInfo> sessionList)
이 이벤트가 실행되어야 한다.
이 이벤트는 로비안에 접속한 상태에서 발생하기에 로비에 접속해야 한다,
이건 방을 로비에 접속시켜서 같은 로비에 있는 플레이어가
가져올수 있게 만드는 방법이다
방을 생성할때 CustomLobbyName 인자를 임의로 지정한다.
나는 CustomLobbyName = "Lobby" 라고 설정하였다.
return await _runner.StartGame(new StartGameArgs()
{
GameMode = mode,
SessionName = sessionName,
Scene = scene,
SceneManager = gameObject.AddComponent<NetworkSceneManagerDefault>(),
IsVisible = isPublic,
CustomLobbyName = "Lobby"
});
그리고 로비에 등록된 방들의 목록을 가져오려면
플레이어가 로비에 접속해야한다.
public async Task JoinLobby(NetworkRunner runner)
{
Debug.Log("join start");
var result = await runner.JoinSessionLobby(SessionLobby.Custom, "Lobby");
Debug.Log("result");
if (result.Ok)
{
Debug.Log("Lobby Join");
}
else
{
Debug.LogError($"Failed to Start: {result.ShutdownReason}");
}
}
주의할점이 몇가지 있는데
비동기인 이 함수는 에러메세지가 유니티 디버그창에 나오지 않는 모양이다.
NetworkBehaviour 에서 Runner 객체로 인자를 부여하면 Null로 에러 메세지가 나오지 않고
무시될수도 있다..
5번째 줄에 "Lobby" 는 접속할 로비 이름으로
방이 접속한 로비에 이름과 같아야한다.
이러면 이벤트가 실행될것이다.