よくある質問
目次
- どのPhoton製品を使用するべきでしょうか?
- Photon RealtimeとPUNのちがいは何ですか?
- LoadBalancing APIとPhoton Realtimeのちがいは何ですか?
- Photon Cloud
- Photon Voice
- 請求
どのPhoton製品を使用するべきでしょうか?
対象となるゲームやプロジェクトの特性によって異なるため、これはむずかしい質問です。 ただし、弊社は以下のように推奨しています:
- 弊社の創立者であり、CTOを務めるChris Wegmannの Unite Europe 2017でのプレゼンテーションを参照してください。
- こちらの製品比較ページを参照してください: "PUNとBoltの比較"
- こちらの製品比較ページを参照してください: "Photon Cloud、それともPhoton Server?"
ご不明点な点がある場合、お問い合わせください。
Photon RealtimeとPUNのちがいは何ですか?
Photon Realtime wraps up all generic features needed for the load balancing of Photon. It is a product as much as a defined workflow to use Name Server, Master Server and Game Servers. Photon Realtime (a.k.a. LoadBalancing) is the basis for many games using Photon.
While Photon Realtime is independent from Unity, PUN adds many comfortable features for Unity and makes Realtime (the lower level) even easier to use.
これらの製品は同じバックエンド、サーバーアプリケーション、低いレベルの要素を共有しており、中核となるコンセプトも同一です。 当初、PUNはより優れたUNet(旧式のUnity Networking)と位置づけられていました:同様のAPIを保持し、さらに強固なバックエンドと豊富な機能を提供していました。 そして、その後PUNは次第に分化して、Unity上でのマルチプレイヤー向けNo1ソリューションとなりました。
Photon Realtime Unity SDKと比較して、PUNは以下のようなさらに高度なレベルの機能を提供し、またこれらの機能は購入後にすぐに使用できます:
- Magic Unity コールバック
- ネットワークオブジェクトをシリアル化および同期する外部Unityコンポーネント:もっとも重要なものにPhotonViewがあります
- PunRPC
- オフラインモード
- ...
詳細はこちらを参照してください。
ただし、PUNはWebhookとルームステートの保持をサポートしますが、保存されたゲームの画面を読み込む際に、シーン内のネットワークオブジェクトのステートを完全に復旧することはできません。 詳細は、こちらを参照してください。
LoadBalancing APIとPhoton Realtimeのちがいは何ですか?
LoadBalancing APIとPhoton Realtimeは、名称は異なりますがおなじものを指しています。 LoadBalancing APIまたはLoadBalancing Client APIは、Photon Realtime製品向けに弊社が提供している、クライアントSDK内で利用できるプログラミングインターフェースです。
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
が作成される前に):// 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
が作成される前に):// 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を使用できます。