よくある質問
どのPhoton製品を使用するべきでしょうか?
対象となるゲームやプロジェクトの特性によって異なります。
通常、弊社はFusion または
Quantumの使用を推奨しています。これらは、弊社のもっとも高度なクライアントソリューションです。
概要について、どちらの製品シートにも製品選びのための「Quadrant」が記載されています:
また、Photon CloudとPhoton Serverのどちらを選択すべきかは、こちらを参照ください。
ご不明点はお気軽にお問合せください。
Photon Cloud
Photon Cloudのステータスを確認する方法は?
Photon Cloudのステータスを確認するには、こちらを参照するか、Twitterで@photon_statusをフォローしてください。
最新のステータスについてお知らせします。
デフォルトのPhotonリージョンは?
少なくとも1つのリージョンが利用できる場合、クライアントはPhoton Cloudに接続可能となるべきです。
この点を保証するため、ディベロッパーが明示的に設定しない場合や「ベストリージョン」オプションを選択しない場合には、デフォルト値を設定するか、
またはデフォルト値を使用する必要があります。
デフォルト値はクライアントSDKによって異なります。
ネイティブSDKでは、OpGetRegions
でサーバーによって返されるリージョンリストのインデックス0の値です。
UnityおよびDotNet SDKでは、デフォルトのリージョンは「EU」とする必要があります。
一部のリージョンを無効にすることは可能ですか?
はい。
許可されたリージョンのリストを定義することにより、別の方法で機能します。
詳細は、Dashboardリージョンのフィルタリングを参照してください。
Photon Voice
会話をファイルに保存する方法は?
この質問については、2つに分けて回答します:
1. 受信音声ストリーム:
Photon Voiceのストリームは、ペアを使用して一意に識別されます:PlayerIdとVoiceIdです。
このペアによって、リモート音声ストリームのソースを推定できます:どのプレイヤーなのか、またどのレコーダーなのかという点です。
リモートストリーム用に3つのイベントをサブスクライブ可能です:
VoiceConnection.RemoteVoiceAdded(RemoteVoiceLink)
: 受信した情報とともに、新規でリモート音声ストリームが作成されます。RemoteVoiceLink.FloatFrameDecoded(float[])
: 特定のリモート音声ストリームから、音声フレームが受信されます。RemoteVoiceLink.RemoteVoiceRemoved
: リモート音声ストリームが終了し、破壊されます(転送が停止されます)。
受信リモート音声ストリーム全体を取得したい場合には、以下が可能です:
- そのストリーム向けに
RemoteVoiceAdded
ハンドラー内でファイルを作成し、開きます。 FloatFrameDecoded
ハンドラーで音声データのフレームを書き込みます。RemoteVoiceRemoved
ハンドラー内でファイルを保存し、閉じます。
ユーザーの入力に応じて、ファイルの開閉やFloatFrameDecoded
のアップデートをおこなえます。
2.発信音声ストリーム
発信音声ストリームについては、Voice.LocalVoiceAudio<T>.IProcessor
を拡張してカスタムプロセッサを作成することが可能です。
ローカルで録音された音声フレームはIProcessor.Process
にあります。
PhotonVoiceCreated
Unityメッセージを受信するには、コンポーネントは Recorder
と同じGameObjectにひもづける必要があります。
メソッド内で、LocalVoice.AddPreProcessor
(転送前) またはLocalVoice.AddPostProcessor
(転送後)を使用して、カスタムプロセッサーをローカルの音声処理パイプラインに挿入してください。
サンプルとして「WebRtcAudioDsp.cs」を参照してください。
カスタムの音声ソースを使用する方法は?
独自のカスタム音声ソースで作成された音声をRecorder
で転送するには:
1つ目のアプローチ: 消費者がデータストリームを制御
AudioClipWrapper
はこのアプローチのサンプルです。
これは、Recorder.AudioClip
に割り当てられた音声クリップをストリーミングします。
音声ソースを読み込むクラスを作成し、
Photon.Voice.IAudioReader
インターフェースを実装します。例:MyAudioReaderSource
エディタ(またはコード)で
Recorder.SourceType
をFactory
に設定します。アプリケーションの初期化中に、クラスのインスタンスを任意の場所に作成します(
Recorder
が作成される前に):C#
// MyAudioReaderSource is just an example, replace with your own class name and constructor Recorder.InputFactory = () => new MyAudioReaderSource();
クライアントが音声ルームに接続され
Recorder
が転送をおこなっている限り、カスタムの音声ソースインスタンス上でIAudioReader.Read(float[] buffer)
メソッドが呼び出されます(例MyAudioReaderSource
)。
コールの周波数とバッファサイズは、カスタムの音声ソースインスタンスのIAudioReader.SamplingRate
プロパティによって返されるサンプル率に一致するよう調整されます(例MyAudioReaderSource
)。
2つ目のアプローチ: プロデューサーがデータストリームを制御
「AudioUtil.cs」内のToneAudioPusher
はこのアプローチのサンプルです。
この場合には
MyAudioPusherSource
などの代わりにPhoton.Voice.IAudioPusher
インターフェースを実装するほうが、より便利です。
任意のコールバックのみを主に格納するIAudioPusher.SetCallback
メソッドを実装する必要があります。エディタで(またはコードで)
Recorder.SourceType
をFactory
に設定します。アプリケーションの初期化中に、クラスのインスタンスをどこかに作成します(
PhotonVoiceRecorder
が作成される前に):C#
// MyAudioPusherSource is just an example, replace with your own class name and constructor Recorder.InputFactory = () => new MyAudioPusherSource();
ストリーミング中に、保有しているサンプルすべてとともに、定期的に
IAudioPusher.SetCallback
を使用して(例えばMonoBehaviour.OnAudioFilterRead
から)コールバックセットを呼び出します。
Photon Voiceは、バッファリング処理をすべておこないます。
請求
学生、趣味でおこなっているディベロッパー、インディー向けの割引はありますか?
弊社の製品にはすべて、無料プランとワンショットのプランがあります。
また弊社は通常、Unityアセットストアのセールに参加し、また当選者にはクーポンを提供しています。
1つのPhotonアプリケーションに、複数の100CCUプランを組み合わせることはできますか?
いいえ。
100CCUプランは1つのAppIDにつき1回のみ適用でき、複数の100CCUプランを使用することはできません。
複数のPUN+アセットシートを購入している場合には、各AppIDに対して個別の無料100CCUを適用する必要があります。
1つのアプリに対してさらに多くのCCUが必要な場合、次の上位プランは500CCUです。
月額または年額プランをご利用の場合には、その月額/年額プランのCCUに加えて、12ヶ月間有効の100CCUを使用できます。