Photon Realtimeで通信中にゲームを終了しようとするとフリーズ/クラッシュする時の対処法
おそらくPhoton Fusion, Photon Quantum, PUNあたりは裏で勝手にやってくれているはずなので対象外。
どこかのUnityバージョンから、裏でスレッドが動き続けているとゲーム終了時にフリーズやクラッシュをするようになった。
Unity Issue Tracker - [General] Terminate Unity Player is never executed when an infinite loop that increments an integer is running in IL2CPP without sleep
こんな感じでQuit時に _loadBalancingClient.LoadBalancingPeer.StopThread(); や SupportClass.StopAllBackgroundCalls(); を呼べば解決。
素直にConnectionHandler.csを使っていれば呼んでくれている。
Photon.cs
public void Start()
{
UnityEngine.Application.quitting += StopAllThreads;
}
public void OnDestroy()
{
UnityEngine.Application.quitting -= StopAllThreads;
}
private void StopAllThreads()
{
if (_loadBalancingClient != null && _loadBalancingClient.IsConnected)
{
_loadBalancingClient.Disconnect();
_loadBalancingClient.LoadBalancingPeer.StopThread();
_loadBalancingClient.LoadBalancingPeer.IsSimulationEnabled = false; // works around a problem with closing the Network Sim Thread in some Unity 6 builds
}
SupportClass.StopAllBackgroundCalls();
}