Photon Voice 1 is the original and first major version of Photon Voice. It is now replaced by Photon Voice 2 which is refactored and enhanced. We highly recommend starting new projects with Photon Voice 2 and if possible migrating existing ones from Photon Voice 1 to Photon Voice 2. Photon Voice 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 Photon Voice 2.

既知の問題点

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

Contents

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

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

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

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

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

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

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

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アセットストアキャッシュフォルダへのパスはこちらに記載されています。

Back To Top

Photon Voice

Android マイクパーミッション

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マイクパーミッション

プロジェクトの「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

MacOSマイクパーミッション

「"Microphone Usage Description」をプロジェクトの"Other Settings" -> "Configuration"以下の「Player Settings」に追加する必要があります。 これによりmacOSアプリケーションバンドルパッケージコンテンツのリストにNSMicrophoneUsageDescriptionが追加されます。 希望があれば、手動で修正することもできます。

ただし、以下の権利付与を追加する必要がある場合もあります:

com.apple.security.device.audio-input
com.apple.security.device.microphone

詳細はこちらを参照してください。

こちらに失敗すると、以下の結果が生じる可能性があります。:

  • クラッシュ
  • マイクのサイレント失敗: 音声入力が記録されません。

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」に切り替えてもアプリケーションはミュートされず、ボリュームをゼロに下げることもできません。

Back To Top

WebGLサポート

WebGLは以下の理由によりサポート対象のプラットフォームとはなっていません。:

  • WebGLはスレッドでうまく作動せず、Photon Voiceのエンコーディングとデコーディングにスレッドを使用しているため。 
  • UnityのマイクがWebGLでは使用できないため。
  • WebGLで作動するOpusコーデックライブラリビルドが必要であるため。
  • WebGL用のPhotonはWebSocketSecureプロトコルにのみ対応しているため。

    Photon Voiceは、UDPを使用するほうが効率がいいです。

これらの理由により、WebGLプラットフォームのサポートを取りやめました。

Back To Top

Oculus OVR SDK

Oculus OVR SDKを使用している場合、「Can Own Microphone」を宇高にします。 このオプションはOculus OVR SDKにマイクのコントロールを許可し、Photon Voice Recorderがマイクに適切にアクセスできなくしてしまいます。

以下にあります。: "LocalAvatarWithGrab" または "(+)LocalAvatar" GameObject -> "Ovr Avatar (Script)" コンポーネント -> "Can Own Microphone" チェックボックスからちぇっくを外します。

Oculus OVR SDKを使用している場合、「Can Own Microphone」を無効にする必要があります。 このオプションで、Oculus OVR SDKに独占的なマイクコントロールが与えられ、Photon Voice Recorderがマイクにアクセスしてしまうことをしっかりと防ぎます。

以下の手順で行います。 "LocalAvatarWithGrab" または "(+)LocalAvatar" GameObject -> "Ovr Avatar (Script)" component -> "Can Own Microphone" チェックボックスで、チェックを外します。

Back To Top

エコーまたはノイズ

まず、必ず最新のPhoton Voice 2にアップデートを行ってください。

エコーを引き起こしうる要因:

  • 十分な距離を保たずに複数のデバイスを用いてテストを行うと、あるデバイスのマイク入力日かのデバイスのスピーカーからの出力をキャッチしてしまう。
  • デバッグエコーを使用したテスト:Recorder.DebugEchoModetrueに設定する
  • 同一のマシン上で複数のクライアントを使用してテストを行うこと。

エコーやノイズを減らすために:

  • ネイティブオーディオインプットプラグイン: Photon マイクタイプを選択する。
  • ソフトウェアオーディオプロセッシング(WebRTCベース): 同一のGameObjectにRecorderとしてアタッチされているWebRtcAudioDspコンポーネントでAEC / AEC MobileおよびNoiseSuppressionを有効にする。

ヘッドフォンの使用で問題が解決できる場合は、他のAppでもよくあるように、ユーザーにヘッドフォンを使用することでオーディオの質が良くなる旨メッセージを追加(例:splashscreenの後)しておくことを推奨します。

Back To Top

低音量

まず、音声が小さい問題の原因が入力にあるのか出力にあるのか確認します。 これは入力ソースとしてAudioClipファイル(このファイルのラウドネスに問題がないことの確認)を、そしてDebugEchoModeを使用して確認できます。 出力に問題がある場合は、スピーカーのボリュームを上げるか、出力オーディオデバイス関連の問題を解決する必要があります。 入力に問題があり、入力ソースがマイクの場合は以下を行います。:

ターゲットのプラットフォームによって以下を選択できます。:

  1. Photonマイクタイプを使用する。
  2. 使用中のRecorderコンポーネントの隣にWebRtcAudioDspコンポーネントを追加し(コンパイル時またはレコーダー開始する前のランタイム時)、「AGC(自動音量コントロール)」を有効にし、必要に応じて「AGC Compression Gain」を調整する。
  3. 使用中のRecorderコンポーネントの隣にMicAmplifierコンポーネントを追加し(コンパイル時またはレコーダー開始する前のランタイム時)、値を調整する。

To Document Top