Fusion2 의 Shared Mode를 사용하기 위해 공식 문서의 튜토리얼을 따라하던 중 문제가 생겼습니다.
이 튜토리얼 중간쯤에 Play Testing 부분에서 둘 다 Start Shared Client 를 눌러도 멀티플레이가 안되는 문제였습니다.
원인은 두 가지 였습니다.
문서에서 예시로 제공해주는 Build 를 설정하고 실행시키면 멀티플레이가 정상적으로 잘 됩니다.
하지만, 해당 빌드의 파일들이 약간씩 다릅니다.
저희가 해결할 수 있는 문제는 세션 이름이 다른 문제입니다.
아래는 실행화면 입니다. PlayerSpawner를 약간 수정해서 세션 이름을 출력해봤습니다.
튜토리얼을 그대로 따라갔는데도 세션 이름이 달라 멀티플레이를 하지 못하고 있습니다.
해결 방법은 간단합니다. 세션이름을 랜덤으로 설정하는 부분을 찾아보면 됩니다.
// ...
if ((serverMode == GameMode.Shared || serverMode == GameMode.AutoHostOrClient || serverMode == GameMode.Server || serverMode == GameMode.Host) &&
clientCount > 1 && config.PeerMode == NetworkProjectConfig.PeerModes.Multiple) {
if (string.IsNullOrEmpty(DefaultRoomName)) {
DefaultRoomName = Guid.NewGuid().ToString();
Debug.Log($"Generated Session Name: {DefaultRoomName}");
}
}
// ...
return runner.StartGame(new StartGameArgs {
GameMode = gameMode,
Address = address,
Scene = sceneInfo,
SessionName = DefaultRoomName,
OnGameStarted = onGameStarted,
SceneManager = sceneManager,
Updater = updater,
ObjectProvider = objectProvider,
});
FusionBootstrap 클래스의 일부입니다.
DefaultRoomName 이 비어있으면 랜덤 문자열을 생성합니다.
즉, 이 전에 DefaultRoomName 에 아무 문자든 채워넣으면 됩니다.
// ..
{
GUILayout.Label("Room:", GUILayout.Height(height), GUILayout.Width(width * .33f));
nds.DefaultRoomName = GUILayout.TextField(nds.DefaultRoomName, 25, GUILayout.Height(height));
}
// ..
실행하면 나오는 Room: 이후에 나오는 빈칸이 세션이름을 결정하는 부분이었습니다.

이 부분을 똑같이 설정하고 실행하면 멀티플레이가 가능합니다.
https://doc.photonengine.com/fusion/current/tutorials/shared-mode-basics/3-movement-and-camera