Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@yakimeron

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 を送っても処理が間に合うわけが無いので、状態を他クライアントと共有する場合はカスタムプロパティを使ったほうが合理的だろう。

参考

2
Help us understand the problem. What is going on with this article?
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
2
Help us understand the problem. What is going on with this article?