概要
NetworkRunner.StartGame() でセッションに入れなかった場合、NetworkRunnerが削除されてしまう仕様みたいなので入室の度に生成する必要があります。
プログラム
以前書いたphoton-fusionに接続のところを以下のように変更することで、必要に応じて生成してStartGameできるようになります。
/* using 省略 */
public class PhotonManager : MonoBehaviour
{
[SerializeField] private NetworkRunner networkRunner;
public async UniTask<StartGameResult> StartGame(INetworkRunnerCallbacks networkRunnerCallbacks)
{
// ここで準備しておいた処理を登録、ルームに参加すると自動で呼び出されるようになる
networkRunner.AddCallbacks(networkRunnerCallbacks);
var startGameArgs = new StartGameArgs
{
GameMode = GameMode.Shared,
};
return await networkRunner.StartGame(startGameArgs);
}
// NetworkRunner.StartGame() でセッションに入れなかった場合、
// NetworkRunnerが削除されてしまう仕様みたいなので入室の度に生成する
private NetworkRunner GetOrInstantiateNetworkRunnerIfNeed()
{
var runner = FindObjectOfType<NetworkRunner>();
if (runner == null)
{
runner = Instantiate(networkRunnerPrefab);
}
return runner;
}
}