既知の問題点
このページでは、Photonが様々なプラットフォーム上で使用される際の既知の問題点について記載します。
ここで焦点をあてるのは解決が不可能な問題、または回避策のない問題です。
一部の項目ではプラットフォームごとに問題のあるバージョンをリスト化し、他のバージョンを紹介します。
バックグラウンドで実行
モバイルプラットフォームでアプリケーションがバックグラウンドに移行すると、クライアントの接続を保持するためのメインメッセージループが一時停止されます。
以下が、この現象のおもな原因です:
- プレイヤーが「ホームボタン」を押した。
- 電話の呼び出しを受信した。
- 動画広告。
- アプリケーションでオーバーレイ表示を発生させる、サードパーティーのプラグイン(たとえばFacebookやGoogleなど)。
iOSでは、アプリケーションはバックグラウンドで接続を維持できません(詳細は、AppleのディベロッパーページでBackground Executionを参照してください)。アプリがバックグラウンドに切り替わったら、クライアントを切断するのが賢明といえるでしょう。
WebGLでは、PlayerTTLを設定し、タブにフォーカスが戻った際にセッションに再接続するのが賢明といえるでしょう。
多くの場合、ブラウザはバックラウンドでJSやWebAssemblyを実行しません。場合によっては、バックグラウンドで音声を再生することによって(たとえ聞き取れないものでも)、これを回避できます。
アプリケーションが、クライアントの切断タイムアウト(デフォルトでは10秒です)よりも長い間停止した場合には、クライアントは切断され、アプリケーションの「一時停止解除」後すぐに再接続する必要があります。 「タイムアウト切断」コールバックは、アプリケーションがバックグラウンドから復帰した後にのみトリガーされます。
ゲーム設計上、プレイヤーが数秒または数分後に戻ることが許容されている場合には、ゲームへの再接続や再参加が可能です。 アプリケーションの一時停止が解除された状態で、同じルームに同じアクター番号で再参加したい場合には、以下の点を考慮する必要があります:
- PlayerTTL: しばらく経過した後にプレイヤーが戻ってこられるよう、PlayerTTLの値を十分に高く設定してルームを作成する必要があります。
- EmptyRoomTTL: 最後に参加したプレイヤーのアプリケーションがバックグラウンドで実行されている場合、しばらくの間ルームをアクティブな状態に保つよう、EmptyRoomTTLの値を十分に高く設定してルームを作成する必要があります。
Unity
インポート時の無限コンパイルエラー
Unity Editorのバージョンによっては、誤った.slnや.csprojファイルを作成する場合があります。これは一時的な可能性があります。プロジェクトを再生成するには、Preferences 「External Tools」パネルのボタンをクリックしてください。
Unity Package ManagerからVisual Studio Editorパッケージを更新または再インストールしたい場合があるかもしれません。
この方法でもプロジェクト作成の問題を解決できます。
古いパッケージがローカルのオフラインキャッシュに残ってしまい、アセットが正常に更新されない場合があります。
これを修正するにはローカルでPhotonアセットパッケージを削除し、ダウンロードとインポートを再試行してください。
ローカルのUnityアセットストアのキャッシュフォルダのパスはここに記載されています.
Socket.SetSocketOptionでのArgumentException
IL2CPPビルドで、"ArgumentException: Value does not fall within the expected range.
at System.Net.Sockets.Socket.SetSocketOption"のエラーがでて接続に失敗するUnityの既知の問題がありました。これはWindows 10 SDK 10.0.19041.0がインストールされた際に発生しました。
影響のあったUnityバージョンは 2018.4.23f1、2019.4.0f1、2020.1.0b11、2020.2.0a13です。Unityのマイナーリリースでもより多くの影響がありました。
修正済みのバージョンは以下のとおりです: 2020.1.1f1、2019.4.5f1およびそれ以降、 2018.4.27もおそらく修正済みです2018.4.23での回避策はこちらに記載されています。
.Net 4.x使用時のUnity 2018.2ソケットのフリーズ
Unity 2018.2はMonoバージョンを使用していました。これはソケット経由通信をフリーズさせてしまうことがありました。メッセージサイズや頻度によって発生していました。
最終的に2019.2で修正され2018.3でもある時点から修正をされています。
Monoと.Net 4.xまたは.Net Standard 2.0を使用する場合は、2018.4.xまたは2019.4.xリリースの使用を推奨します。
RunInBackground
UnityのApplication.runInBackground
はモバイルプラットフォーム上ではサポートされていません。
その代わりに、アプリケーションがバックグラウンドやフォアグラウンドに移動した場合には、OnApplicationPause
メソッドが呼ばれます。
C#
void OnApplicationPause( bool pauseStatus )
{
if (pauseStatus)
{
// app moved to background
} else
{
// app is foreground again
}
}
IOS App Store への投稿の拒否
App Store への投稿が Apple チームによって拒否されることがあります。
Apple と解決しようとしましたが、現在ではこの現象はまだ稀に発生する可能性があります。通常、このようなケースではUDPがブロックされています。
新しいPhotonクライアントは、UDPが接続できない場合、自動的にTCPを使用するようにフォールバックします。
拒否されたことを訴える必要がありますが、疑問がある場合は、Appleのデベロッパーサポートに引き継ぐよう依頼してください。彼らのセットアップは通常UDPをサポートしています。
このヘルプのためのフォーラムでの議論を参照してください。
iOS IPv6
Unity 5.xは基本的にiOSのIPv6をサポートしているはずですが、一部のバージョン(5.4など)ではこの機能が壊れています。
サポートされているバージョンの一部:4.7.2, 5.1.5, 5.2.5, 5.3.4p4, 5.4.0p1 およびそれ以降 (Unityブログポストを参照)。
UWP / Windows ストア機能
Windows Storeが対象で、接続を試行する場合に例外が生じている際や、または以下のエラーが発生する場合について説明します:
このネットワークにアクセスするには、ネットワーク機能が必要です!
必要な機能を有効化するには、Unityの「Player Settings」-> 「Publisher Settings」 -> 「Capabilities」-> 「InternetClient」から設定をおこないます。
UWPアプリケーションは他のアプリケーションから分離されており、機能として同じWindowsインスタンス上で実行されているサーバーに接続することはできません。
「AppContainer Isolation」についてはMicrosoftのドキュメントを参照ください。
UWPエクスポート
UnityアプリケーションをUWPにエクスポートする場合、スクリプトのバックエンドとして.NETまたはIL2CPPを使用できます。アプリケーションをUnityから正常にエクスポートするため、Photon PUNまたはPhoton Realtime Unity SDKは正しいライブラリを選択するようすでに設定されています。もしエクスポート中に何らかのエラーが生じる場合には、該当のスクリプトバックエンドに対して正しいライブラリを使用しているか、確認してください。
Back to top