スライドバーを表示

Realtimeイントロ

はじめに

Photon Realtimeは世界中のリージョンで動作しているPhoton on-premises serversのための完全管理されたサービス(SaaS)です。低レイテンシーで複数のプレイヤーがいつでも世界中からプレイすることが可能です。

Photon RealtimeのマルチプレイヤーAPIを使うとシェアしたゲームセッションで複数のプレイヤーを一緒に参加させたり、別のプラットフォーム上のプレイヤー間でデータやメッセージの転送を同期的に、リアルタイムで行うことができます。 全てのクライアントSDKはお互いに通信が可能です。たとえば、 iOS、アンドロイド、ウェブ、スタンドアロン、のいずれのコンソールを使用していても通信が可能です。

接続する

Photon Realtimeアプリケーションは接続先となる個別のアプリケーションとAppIDが必要です。 無料サインアップをしてRealtimeダッシュボードからAppIDを取得しましょう。

AppIdの取得が完了していれば、LoadBalancingClientインスタンスを作成してConnectToRegionMasterを呼ぶことができます。

AppIdを設定して、ConnectToRegionMasterで接続する地域を選択します。 利用可能リージョンのリストはこちらから

デモで説明されているとおりLoadBalancingClientを拡張して、コールバックの修正やサーバから届く更新を処理するのが最適な方法です。これはデモで説明されています。

Serviceを呼ぶ

LoadBalancing APIはゲームロジックと最適に統合するために作られています。受信メッセージを処理するタイミングや送信の頻度を微調整できます。内部ではゲームがLoadBalancingClient.Service()を呼ぶまで送受信共にバッファされます。

Service()はfalseが返されるまで、内部でDispatchIncomingCommands()を呼んでゲームロジックに全ての受信メッセージを送ります。Service() を呼ぶとOnEventOnOperationResponse等のコールバックが稼動します。 Service()は、最後のSendOutgoingCommands以降にクライアントが呼んだオペレーションを実際に送信するSendOutgoingCommandsも呼びます。

多くの場合、ゲームは更新を計算してスクリーンを更新するゲームループを使っています。Service() を1秒に10~20回呼んで下さい。Service() を呼ばないとネットワークプログレスは行われません。

マッチメイキング

ゲームの作成

新しいルーム(ゲーム) を作成するには接続されているLoadBalancingClientOpCreateRoomを呼び出してください。

ここではルーム名とルームで許可されているプレイヤー(4)の数を設定します。 クライアントは、自動的に新しいルームに入ります。 最後のプレイヤーが退室するまで、ルームは存在します。

ルーム作成時に、RoomOptions.customRoomPropertiesを定義してルーム共通の値を設定することができます。カスタムルームプロパティを使用して、例えば、マップ名、レベル、ラウンドの時間などを保存することができます。 カスタムプロパティのキーは文字列でなければなりません。もちろん、これらの値はルーム内で設定および変更することもできます。

カスタムプロパティをロビーにも表示する場合は、RoomOptions.customRoomPropertiesForLobby任意の配列に名前を代入することで設定が可能です。 ロビーに表示するプロパティは、マッチメイキングやランダムマッチのフィルタとして使用することができます。

TypedLobby.Defaultは、新しいルームがデフォルトのロビーにリストされることを意味し、別のマッチメイキングで使用することができるルームのリストを表示します。

ゲームを検索

クライアントはルーム名を指定するか、Photonにマッチングのリクエストをしてゲームに参加します。

ルームの検索方法:

  • Random:ランダムにプレイヤーをマッチングします。必要に応じてルームを満員にするか、均等にプレイヤーを配布します。
  • Filter:ランダムマッチメイキングでフィルタを使用して好みに応じたマッチングを行います。
  • Listing:ロビーでルームのリストを表示して、プレイヤーが選択して手動で参加できるようにします。
  • Private:名前を指定して非表示のルームに参加します。
  • Parameterized:期待されるプロパティを定義することで、ランダムマッチングをカスタマイズします。

ゲームプレイ

イベントの送信

一つのクライアント上で起こることは全て同じルームにいる全員を更新するイベントとして送信することができます。

統計、位置または現在のターンでプレーヤーを更新します。 Photonは即座にそれを送信します(任意の信頼性で)。

  • Send messages/events: 他のプレイヤーに任意タイプのデータを送信。
  • Player/Room properties: Photonはこれを更新および同期します。後から参加するプレイヤーにも。

イベントコードは200以下にしてください。また、各コードはイベントの型と含まれる内容を定義してください。

上記例のイベントデータはHashtableです。byte[]やPhotonのシリアル化(stringfloat[]等)で対応しているその他のデータ型を使用できます。 詳細はPhotonでシリアル化を参照

イベントの受信

イベントが送出されるたびにOnEventのハンドラが呼び出されます。

各イベントは、クライアントがそれらを送った方法で、EventData.CodeEventData.Parameters実行します。 アプリケーションは、EventDataで渡されたCodeによって、期待されるコンテンツを把握することができます(上記参照)。

デフォルトのイベントコードの最新のリストは、SDK内のEventCode定数から確認してください。例えば、C#の場合はExitGames.Client.Photon.LoadBalancing.EventCode内にあります。

カスタムまたは権威サーバロジック

標準で搭載されているロジック以外ではPhoton Cloudの製品は幅広いタイプのゲームに対応しています。

  • ファーストパーソンシューター
  • レーシングゲーム
  • マインクラフトタイプのゲーム
  • カジュアルなリアルタイムゲーム
  • 同期的及び非同期的ゲーム
  • ...

Photon Server を使ってカスタムロジックを実施

サポートについて

Photonチーム(通称Photonian)は万全なサポート体制を敷いています。質問やアプリの不具合の解決には次の方法をお試しください:

  • 問題が発生した場合:フォーラムに質問を投稿してください。
  • プライバシーを重視する場合やサポートが必要な場合はdeveloper@photonengine.jpまでご連絡ください。

スピーディーな対応のために

スピーディーに対応できるよう、再現の手順と共に以下の情報を明記してください:

  • Photon Client SDKのバージョン

    • SDK zipファイル名に含まれています。
    • PUNの場合はPhotonNetwork.versionPunの数値をご連絡ください。
  • Photon Cloud

    • Connect*()コールで設定されるゲームバージョンAppId両方ご連絡ください。
    • ルームに関する問題の場合はRoomNameServer Addressをご連絡ください。C#の場合、ルーム内でclient.CurrentServerAddressをログすることで取得可能です。
    • RegionServer Addressをご連絡ください。
  • Photon Server

    • サーバをホスティングしている場合、Server SDK Versionをご連絡ください。これはSDKのzipファイル名に含まれています。
    • ログを添付してください。

ご意見をお聞かせください

特定のドキュメントに関する指摘、デモの要望、FAQの要望等のドキュメントに関するご意見がございましたら是非お聞かせください。developer@photoncloud.jpまでお気軽にご連絡ください。

より詳しくPhotonについて知りたいですか?

まずは 無償プランを試してみよう。
イベント会場で我々に会いにきてください。
MTGの要望はこちらへ。

 ドキュメントトップへ