PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

既知の問題点

このページでは、Photonが様々なプラットフォーム上で使用される際の既知の問題点について記載します。 ここで焦点をあてるのは解決が不可能な問題、または回避策のない問題です。 一部の項目ではプラットフォームごとに問題のあるバージョンをリスト化し、他のバージョンを紹介します。

Contents

モバイル・バックグラウンドアプリケーション

モバイルプラットフォームでアプリケーションがバックグラウンドに移行すると、クライアントの接続を保持するためのメインメッセージループが一時停止されます。

以下が、この現象のおもな原因です:

  • プレイヤーが「ホームボタン」を押した。
  • 電話の呼び出しを受信した。
  • 動画広告。
  • アプリケーションでオーバーレイ表示を発生させる、サードパーティーのプラグイン(たとえばFacebookやGoogleなど)。

PUNには、クライアントをサーバーに接続し続けるためのバックグラウンドのフォールバックスレッドがあります。 これはiOS上では作動しません(Apple ディベロッパーページのBackground Executionを参照してください)。 接続を保持するため、バックグラウンドスレッドは限定された時間、サーバーのみにACKを送信します。 デフォルトのバックグラウンドスレッドタイムアウトは60秒間です。この時間はPhotonNetwork.BackgroundTimeoutを使用して変更できます。 バックグランドがタイムアウトすると、PUNはクライアントを切断します。 バックグラウンドへの移行前にクライアントがルームに参加した場合に、アプリケーションがフォアグラウンドになった直後にPUNは(必要に応じて)同じルームへの再接続と再参加を試行します。

Back To Top

PhotonAnimatorView And とTrigger

Animator ControllerTriggerパラメータを使用していて「PhotonAnimatorView」を使って同期をおこないたい場合には、問題が発生しないよう処理方法を検討することが重要です。

  • Triggerの性質上、Triggerはアニメーションイベントが開始した際にのみ有効化され、次のUpdate()の直前に非有効化されます。
  • GameObject上のコンポーネントは、宣言された順に実行されます。
  • 実行順序の設定を編集すると、GameObjectのコンポーネント上の実行順序に影響を及ぼします。 「PhotonAnimatorView」コンポーネントは、Triggerを起動するコード後に実行する必要があります。 このため、これはスタックの最下部に設定したほうが安全です。 あるいは、少なくともAnimator.SetTrigger(...)を使用してTriggerを起動するコンポーネントの 下に設定してください。

「PhotonAnimatorView」Inspectorは、様々なパラメータの最新値を表示します。 trueとなるべき時にTriggerが的確にtrueになっているかを、パブリッシュ前でもチェックすることができます。 trueになっていない場合には、この特定のTriggerがネットワーク上で同期されていない可能性があります。

Back To Top

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のマイナーリリースでもより多くの影響がありました。 LTSとTechのすべてのリリース(2018.4以降)では修正されています。

Back To Top

.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リリースの使用を推奨します。

Back To Top

RunInBackground

UnityのApplication.runInBackgroundはモバイルプラットフォーム上ではサポートされていません。 その代わりに、アプリケーションがバックグラウンドやフォアグラウンドに移動した場合には、OnApplicationPause メソッドが呼ばれます。

void OnApplicationPause( bool pauseStatus )
{
    if (pauseStatus)
    {
        // app moved to background
    } else
    {
        // app is foreground again
    }
}

Back To Top

Windows Storeの機能

Widows Storeが対象で、接続を試行する場合に例外が生じている際や、または以下のエラーが発生する場合について説明します:

A network capability is required to access this network resource

必要な機能を有効化するには、Unityの「Player Settings」-> 「Publisher Settings」 -> 「Capabilities」-> 「InternetClient」から設定をおこないます。

Required Capability for Windows Store Apps
Photon PUN: Windows Storeアプリケーションに必要な機能。Photon Voiceを使用している場合には、'Microphone'機能も必要です。

Back To Top

UWPエクスポート

UnityアプリケーションをUWPにエクスポートする場合、スクリプトのバックエンドとして.NETまたはIL2CPPを使用できます。アプリケーションをUnityから正常にエクスポートするため、Photon PUNまたはPhoton Realtime Unity SDKは正しいライブラリを選択するようすでに設定されています。もしエクスポート中に何らかのエラーが生じる場合には、該当のスクリプトバックエンドに対して正しいライブラリを使用しているか、確認してください。

スクリプトバックエンドとして .NETを使用している場合には、Photon3Unity3D.dllが/Assets/Plugins/Metro/ディレクトリから使用されている点を確認してください。

Back To Top

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のブログ記事を参照してください)。

Back To Top

アセットストアパッケージのアップデート

Unityの一部のバージョンでは、アセットがまったくアップデートされないか、正常にアップデートされない場合があります。 PUN向けの変更履歴テキストファイル、またはPhotonServerSettingsを参照し、常にPhotonパッケージのバージョンを確認してください。 古いパッケージではローカルのオフラインキャッシュで処理が進まず、アップデートがまったく発生しない、またはアップデートが正常におこなわれない場合がある、という既知の問題が報告されています。この問題を修正するには、まずPhotonアセットパッケージをローカルで削除し、再度ダウンロード/インポートを試行してください。 ローカルのUnityアセットストアキャッシュフォルダへのパスはこちらに記載されています。

To Document Top