Photon Voice1は、Photon Voiceの最初のバージョンです。        現在では、リファクタリング・拡張されたPhoton Voice 2に置き換えられています。            新しいプロジェクトを開始する場合は、

既知の問題点

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

Contents

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

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

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

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

アプリケーションが、クライアントの切断タイムアウト(デフォルトでは10秒です)よりも長い間停止した場合には、クライアントは切断され、アプリケーションの「一時停止解除」後すぐに再接続する必要があります。 アプリケーションがすでにバックグラウンドでない場合のみ、「タイムアウト切断」コールバックが呼ばれます。

ゲーム設計上、プレイヤーが数秒または数分後に戻ることが許容されている場合には、ゲームへの再接続や再参加が可能です。 アプリケーションの一時停止が解除された状態で、同じルームに同じアクター番号で再参加したい場合には、以下の点を考慮する必要があります: - PlayerTTL: しばらく経過した後にプレイヤーが戻ってこられるよう、PlayerTTLの値を十分に高く設定してルームを作成する必要があります。 - EmptyRoomTTL: 最後に参加したプレイヤーのアプリケーションがバックグラウンドで実行されている場合、しばらくの間ルームをアクティブな状態に保つよう、EmptyRoomTTLの値を十分に高く設定してルームを作成する必要があります。

Back To Top

Unity

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は正しいライブラリを選択するようすでに設定されています。もしエクスポート中に何らかのエラーが生じる場合には、該当のスクリプトバックエンドに対して正しいライブラリを使用しているか、確認してください。

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

Photon Voice

Android 6.0パーミッション

Androidパーミッションのリクエストが Unity 2018.3で追加されました。 詳細はこちらを参照してください。このリンクでは、マイクパーミッションをリクエストする例を参照できます。

通常、Androidプラットフォームを構築する際には、多くのパーミッションはUnityによって自動的にマニフェストファイルに追加されます。 Photon Voiceによって必要とされるパーミッションは以下の2つです:

  • android.permission.INTERNET: UnityのPlayer Settingsによって、自動的に追加されます。
  • android.permission.RECORD_AUDIO: UnityのマイクAPIが使用されている場合に自動的に追加されます。

ただしAndroid Marshmallowの場合には、新たに導入されたパーミッションモデルが原因と思われる問題があります。 生成されたAPKにはandroid.permission.RECORD_AUDIOパーミッションがなく、アプリケーションは音声を録音できません。 Android SDKレベル23が対象で、この問題を回避するには最新バージョンのUnityにアップデートしてください。

Unityのデフォルトの動作では、アプリケーションが開くとすぐにすべてのパーミッションを要求されます。 これを非有効化するには、"AndroidManifest.xml"ファイルに以下の1行を追加してください:

もしこの追加をおこなった場合には、自分でマイクパーミッションを要求する必要があります。 要求しないとPhoton Voiceが機能しません。 こちらのプラグインを使用できます。

Back To Top

IOS 10の要件

プロジェクトの「Player Settings」に「Microphone Usage Description」を追加する必要があります。以下のスクリーンショットのとおり、「Other Settings」から -> 「Configuration」セクションを開いてください。

Microphone Usage Description in Player Settings for iOS
iOS向けPlayer Settings内のMicrophone Usage Description

または、UnityによってエクスポートされたXcodeプロジェクトで「Info.plist」へのNSMicrophoneUsageDescriptionキーを追加する必要があります。 文字列の値で、そのアプリケーションでマイクを使用する理由を説明しなければなりません。 説明しない場合には、以下の結果が生じる可能性があります:

  • ビルドサブミッションをAppleが却下
  • クラッシュ

Back To Top

Unityでのマイクの問題

  • Unityの一部のバージョンでは、Microphone.Start()がヌルポインタ例外、または0チャネルをスローする場合があります。 後者の場合には、以下の例外が生じる可能性があります。 後者の場合には、以下の例外が生じる可能性があります。

ArgumentOutOfRangeException: モノまたはステレオにする必要があります

  • Unityの一部のバージョンでは、マイククリップから報告されるサンプル率が0となる場合もあります。 詳細は、Unity Issue Trackerのリンクを確認してください。  

  • Unityの一部のバージョンでは、Windowsでの入力デバイス切替が破損しています。 詳細は、Unity Issue Trackerのリンクを確認してください。

  • Unityの一部のバージョンでは、どのUnityマイクデバイスを選択しても、デフォルトのマイクのみが録音に使用される場合があります。 詳細は、Unity Issue Trackerのリンクを確認してください。

Back To Top

周波数の警告

以下のような警告が表示される場合があります:

MicWrapper does not support suggested frequency 48000 (min: 44100, max: 44100). Setting to 44100

この警告は、設定されたサンプリング率がハードウェアの制約によって使用できないことを意味しています。

Local voice #1 audio source frequency 44100 and encoder sampling rate 24000 do not match. Resampling will occur before encoding.

上記の警告はリサンプリング(理論上はパフォーマンスに影響します)に関するもので、マイクの周波数がエンコーダーの周波数と一致しない場合に表示されます。 上記からわかるとおり、可能な場合は常にマイクの周波数とエンコーダーの周波数を完全に一致させてください。

Opusエンコーダーは、受信シグナルに対していくつかの固定された周波数をサポートしています。 ローカル音声を作成する際には、これらの周波数から選択する必要があります。 さまざまな周波数のデータをローカル音声に入力するのは意味がありません。 このためキャプチャデバイスを設定する際には、そのデバイスにも同じ周波数を設定してください。 ただし、一部のデバイスでは任意の周波数が許容されません(たとえばAndroid)。 この場合には可能な限り近く、かつサポートされた周波数が設定されます。

Back To Top

ネイティブライブラリのアップデート

Unity Editor Warning For Native Library Files
ネイティブライブラリファイルについてのUnity Editorの警告

コードを使用して、Unity Editor内のプレイモードでネイティブライブラリファイルがロードされると、Editoを閉じない限りそのライブラリファイルはアンロードされません。 少なくとも1回はプレイモードに入ったことがあるため、もし後者がすでにメモリにロード済みの場合にネイティブライブラリファイルのインポートとアップデートを試行するとUnity Editorはエラーを投げます(以下のスクリーンショットを参照してください)。 Editor内またはEditor外から手動でネイティブライブラリファイルを削除しても、Editorがまだ開いている場合には問題は継続します。 このため、Photon Voiceをアップデートする場合には、Unity Editorを必ず再起動する点、またアップデート前にプレイモードに入らないようにする点に留意してください。

Unity Editor Native Library Import Error
Unity Editorでのライブラリインポートエラー

Back To Top

Android 64ビットのサポート

Photon VoiceはAndroid64ビットに互換性のあるライブラリを、バージョン1.18と2.4から提供しています。 サポート対象のUnity最小バージョンは、2017.4 LTSと2018.2です。 Android 64ビットをサポートするUnityバージョンの完全なリストや手順については、 こちらのリンクを参照してください。

Back To Top

IOSスピーカーの問題

UnityにはiOS(ほとんどの場合、iPhone)での既知の問題があり、ラウドスピーカーやその他の接続されたヘッドフォン、ヘッドセット、イヤーピースではなく「イヤースピーカー」(電話の通話に使用されるデバイスの前面最上部にあるスピーカー)がデフォルトの音声出力デバイスとして使用されます。

この問題は、「低音量」と呼ばれることもあります。

詳細は、Unity Issue Trackerのリンクを確認してください。

この問題を解決するには、以下を推奨します:

  1. Photon Voice1を使用している場合には、Photon Voice2にアップグレードしてください。
  2. PhotonをRecorder.MicrophoneTypeとして使用してください。

  3. 上記1と2が不可の場合には: a. Unity 2018.3以降を使用している場合には、iOS Player Settingsから「Force iOS Speakers when Recording」を有効化できます。 b. Photon Voiceにはすでに「UnitySpeakerFix」が含まれています。Recorderと同じGameObjectにIOSAudioForceToSpeakerコンポーネントを追加してください。

  4. Unity Editorまたはコードから、Recorder.SetIosAudioSessionParametersメソッドを使用してiOS音声セッションパラメータを調整してください。プリセットから値を選択するか、または手動でカスタムの値を定義することができます。iOS音声セッションについては、こちらを参照してください。

Back To Top

IOSサイレント/着信音の切替とミュート

設計上、設定されている場合にはほとんどのiOS音声セッションカテゴリでミュートは許可されません。詳細情報は、こちらのTable B-1を参照してください。たとえば、デフォルトの音声セッション「PlayAndRecord (AVAudioSessionCategoryPlayAndRecord)」を使用している場合(「ゲーム」プリセットによって設定)、ハードウェアを「Silent」に切り替えてもアプリケーションはミュートされず、ボリュームをゼロに下げることもできません。

ドキュメントのトップへ戻る