Help us understand the problem. What is going on with this article?

Photonを利用したプロジェクトでビルドした時のみルームから一定時間後に切断されてしまう問題

概要

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が...😰
image.png

コードをちょこっと書き換えて30秒で2回のRaiseEventにまで抑えた😊
image.png

まとめ

Editor では正常に動作していたのでなかなかハマりやすいのかもしれないと思った。
毎フレーム RaiseEvent を送っても処理が間に合うわけが無いので、状態を他クライアントと共有する場合はカスタムプロパティを使ったほうが合理的だろう。

参考

yakimeron
株式会社テックコネクト代表取締役兼エンジニアです。Scala/Swift/Kotlin/C#/Java/C++/Go/Ruby/PHP/Python/JavaScriptを書き、AWS/Firebaseを使います。現在はUnity+Go+Nuxt.js+AWS+Firebase+PhotonEngineを利用してVRサービスを開発しています。コードを書いて物を作り出すのが何よりも好き!!
https://techconnect.co.jp/
techconnect
仮想世界の未来を創る VR SNS「TECO」を開発しています!日本のxR業界の発展に少しでも貢献できればと思い立ち上げました。
https://techconnect.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした