よくある質問

目次

どのPhoton製品を使用するべきでしょうか?

対象となるゲームやプロジェクトの特性によって異なるため、これはむずかしい質問です。 ただし、弊社は以下のように推奨しています:

ご不明点な点がある場合、お問い合わせください。

トップに戻る

Photon RealtimeとPUNのちがいは何ですか?

Photon Realtimeは、Photonのロードバランシングに必要な汎用的な機能をすべて包含しておりネームサーバー、マスターサーバー、ゲームサーバーを使用するための定義されたワークフローともいえる製品です。Photon Realtime(別名LoadBalancing)は、Photonを使った多くのゲームの基礎となっています。

Photon RealtimeはUnityから独立していますが、PUNはUnityに多くの快適な機能を追加し、Realtime(下位レベル)をさらに使いやすくしています。

これらの製品は同じバックエンド、サーバーアプリケーション、低いレベルの要素を共有しており、中核となるコンセプトも同一です。 当初、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: リモート音声ストリームが終了し、破壊されます(転送が停止されます)。

受信リモート音声ストリーム全体を取得したい場合には、以下が可能です:

  1. そのストリーム向けにRemoteVoiceAdded ハンドラー内でファイルを作成し、開きます。
  2. FloatFrameDecoded ハンドラーで音声データのフレームを書き込みます。
  3. RemoteVoiceRemovedハンドラー内でファイルを保存し、閉じます。

ユーザーの入力に応じて、ファイルの開閉やFloatFrameDecodedのアップデートをおこなえます。

2.発信音声ストリーム

発信音声ストリームについては、Voice.LocalVoiceAudio<T>.IProcessorを拡張してカスタムプロセッサを作成することが可能です。 ローカルで録音された音声フレームはIProcessor.Processにあります。 PhotonVoiceCreated Unityメッセージを受信するには、コンポーネントは Recorderと同じGameObjectにひもづける必要があります。 メソッド内で、LocalVoice.AddPreProcessor (転送前) またはLocalVoice.AddPostProcessor(転送後)を使用して、カスタムプロセッサーをローカルの音声処理パイプラインに挿入してください。 サンプルとして「WebRtcAudioDsp.cs」を参照してください。

トップに戻る

カスタムの音声ソースを使用する方法は?

独自のカスタム音声ソースで作成された音声をRecorderで転送するには:

1つ目のアプローチ: 消費者がデータストリームを制御

AudioClipWrapperはこのアプローチのサンプルです。 これは、Recorder.AudioClipに割り当てられた音声クリップをストリーミングします。

  1. 音声ソースを読み込むクラスを作成し、Photon.Voice.IAudioReaderインターフェースを実装します。例: MyAudioReaderSource
  2. エディタ(またはコード)でRecorder.SourceTypeFactoryに設定します。
  3. アプリケーションの初期化中に、クラスのインスタンスを任意の場所に作成します(Recorderが作成される前に):

        // MyAudioReaderSource is just an example, replace with your own class name and constructor
    Recorder.InputFactory = () => new MyAudioReaderSource();
  4. クライアントが音声ルームに接続されRecorderが転送をおこなっている限り、カスタムの音声ソースインスタンス上でIAudioReader.Read(float[] buffer)メソッドが呼び出されます(例 MyAudioReaderSource)。 コールの周波数とバッファサイズは、カスタムの音声ソースインスタンスのIAudioReader.SamplingRateプロパティによって返されるサンプル率に一致するよう調整されます(例 MyAudioReaderSource)。

2つ目のアプローチ: プロデューサーがデータストリームを制御

「AudioUtil.cs」内のToneAudioPusherはこのアプローチのサンプルです。

  1. この場合にはMyAudioPusherSourceなどの代わりにPhoton.Voice.IAudioPusherインターフェースを実装するほうが、より便利です。 任意のコールバックのみを主に格納するIAudioPusher.SetCallbackメソッドを実装する必要があります。
  2. エディタで(またはコードで)Recorder.SourceTypeFactoryに設定します。
  3. アプリケーションの初期化中に、クラスのインスタンスをどこかに作成します(PhotonVoiceRecorderが作成される前に):

        // MyAudioPusherSource is just an example, replace with your own class name and constructor
    Recorder.InputFactory = () => new MyAudioPusherSource();
  4. ストリーミング中に、保有しているサンプルすべてとともに、定期的にIAudioPusher.SetCallbackを使用して(例えばMonoBehaviour.OnAudioFilterReadから)コールバックセットを呼び出します。 Photon Voiceは、バッファリング処理をすべておこないます。

トップに戻る

請求

学生、趣味でおこなっているディベロッパー、インディー向けの割引はありますか?

弊社の製品にはすべて、無料プランとワンショットのプランがあります。 また弊社は通常、Unityアセットストアのセールに参加し、また当選者にはクーポンを提供しています。

トップに戻る

1つのPhotonアプリケーションに、複数の100CCUプランを組み合わせることはできますか?

いいえ。 100CCUプランは1つのAppIDにつき1回のみ適用でき、複数の100CCUプランを使用することはできません。 複数のPUN+アセットシートを購入している場合には、各AppIDに対して個別の無料100CCUを適用する必要があります。 1つのアプリに対してさらに多くのCCUが必要な場合、次の上位プランは500CCUです。 月額または年額プランをご利用の場合には、その月額/年額プランのCCUに加えて、12ヶ月間有効の100CCUを使用できます。


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