概要
Photon を使った Unity プロジェクトで、なぜかビルドした時だけルーム入室から数秒後に切断されるバグが発生していたが、原因が分かったので記事を残しておく。
環境
- Unity 2018.4.22f1
- Photon Unity Network PUN 1.91
事象
下記のコードを仕込んでおいて、DevelopmentBuildでエラーを特定。
DisconnectByClientTimeout
エラーが発生していた。
void OnConnectionFail(DisconnectCause cause)
{
Debug.LogError("通信切断発生 connectionFail");
Debug.LogError(cause);
}
回線が細すぎたのかと思ったが、環境を変えても再現していた。
通信切断後に下記のエラーも必ずセットで発生しており、もしかしたら RaiseEvent が大量に送られている事が原因なのでは無いかとあたりを付けてみた。
RaiseEvent() failed. Your event is not being sent! Check if your are in a Room and the eventCode must be less than 200 (0..199).
原因
コードをよく見てみると、毎フレーム RaiseEvent を送っている箇所があった。
早速該当コードをコメントアウトしてみると、ルーム切断がされなくなったので正解だった模様。
30秒ちょっとで約3,000回のRaiseEventが...😰
コードをちょこっと書き換えて30秒で2回のRaiseEventにまで抑えた😊
まとめ
Editor では正常に動作していたのでなかなかハマりやすいのかもしれないと思った。
毎フレーム RaiseEvent を送っても処理が間に合うわけが無いので、状態を他クライアントと共有する場合はカスタムプロパティを使ったほうが合理的だろう。