ユーザーIDとフレンド

ユーザーID

Photonでは、プレイヤーは一意のユーザーIDを使用して識別されます。

ユーザーIDは、大文字と小文字を識別します。: 次の二つは異なるプレイヤーのういーざーIDとなります:"Photonian" と "photonian"

同じユーザーIDを使用して、複数のクライアントからPhotonチャネルへの連携が可能です。 この場合には各クライアント上で、同じメッセージを受信します。 また、同じユーザーIDで接続したクライアントはすべて、同一のチャネルに連携され、いつでも同じフレンドを持つことができます。

Back To Top

一意のユーザーID

一般的に、ユーザーIDは表示されることを前提としていません。 この点は、ユーザー名、表示名やニックネームと異なります。 ユーザーIDは人間が読解可能である必要はなく、また人間に非常に分かりやすくする必要はありません。 つまり、たとえばGUIDをユーザーIDとして使用することも可能です。

プレイヤーごとに一意のユーザーIDを保持することの利点は以下のとおりです: - ゲームセッション間や複数のデバイス間で、データを保持します。 ルームへの再参加や、中断した時点からのプレイの再開が可能です。

  • 会ったことのあるプレイヤー全員に存在を把握され、またそれらのプレイヤーから容易に識別されるようになります。 招待や挑戦を送ったり、オンラインパーティーを開催したり、チームやギルドを作るなどしてフレンドとプレイできます。

ユーザープロファイル(例:経験、統計、実績、レベルなど)を追加して、ゲームをさらに難しくすることができます(トーナメントやスコアボードの使用も可能です)。 - PhotonのユーザーIDを外部の一意の識別子にひもづけて、別のサービスを使用することができます。 たとえばFacebookのID、GoogleのID、SteamのID、PlayFabのIDなどをPhtonのユーザーに設定可能です。 - 対象となるユーザーIDのブラックリストを保持したり、 を使用して、悪意のあるユーザーが接続しないようにすることができます。

Back To Top

ユーザーIDの設定

一旦認証されると、切断されるまでPhotonクライアントは同じユーザーIDを保持します。 クライアントのユーザーIDは3つの方法で設定されます:

  1. クライアントは、接続前にAuthenticationValues.UserIdを設定してユーザーIDを送信します。 このオプションは、 を使用せずに、ユーザーIDを設定したい場合に役立ちます。
  2. 認証が成功すると、外部認証プロバイダはユーザーIDを返します。 クライアントから送信された値はすべて上書きされます。
  3. Photon Serverは、上記の1または2でユーザーIDを取得しないユーザーに対して、IDとしてGUIDを割り当てます。このため、匿名ユーザーもユーザーIDを持つことになります。

Back To Top

パブリックチャネルのユーザーリスト

次の2つの機能は、まだすべてのPhoton ChatクライアントSDKに入っていません。この機能が必須の場合、developer@photonengine.jpまでご連絡ください。

パブリックチャネル内のユーザーリストについて、クライアントによりコントロールを持たせる場合は、 MaxSubscribersおよびPublishSubscribersを利用します。 仕様で、両オプションとも一度にサブスクライブするのは一つのチャネルのみで、複数のチャネルには登録しません。

Back To Top

MaxSubscribers

デフォルトで、パブリックチャネルのサブスクライバ数に制限はありません。ユースケースによっては、サブスクライバ数に制限を設ける必要もあります。

Photon Chatのパブリックチャネルは、作成時にサブスクライバ数に制限を設けることができます。 この制限は"MaxSubscribers"と呼ばれます。 最初のユーザーがサブスクライブしたときにパブリックチャネルが作成されるということは、MaxSubscribersが設定されるのはチャネルに最初にサブスクライブしたユーザーによってということになります。

chatClient.Subscribe("theFiftyClan", creationOptions: new ChannelCreationOptions { MaxSubscribers = 50 });

クライアントがMaxSubscribersを0に設定した場合、パブリックチャネルはデフォルトのサブスクライバ数無制限の挙動をとります。

チャネルごとのMaxSubscribersを把握するには、チャネルクラスのプロパティまたは同じ名前を持つフィールドを使用します。例:C#のSDKではChatChannel.MaxSubscribersです。

Back To Top

PublishSubscribers

デフォルトでは、Photon Chatのクライアントはパブリックチャネル内でのユーザーの記録をつけません。 チャネルから受信したメッセージの送信者のリストのみキャッシュします。

ユースケースによっては、Chatクライアントが現在登録中のユーザーのリストを常に必要とすることがあります。 この機能は、"PublishSubscribers"と呼ばれ、チャネルの作成の際にチャネルごとに有効にします。 最初のユーザーがサブスクライブしたときにパブリックチャネルが作成されるので、"PublishSubscribers"は、チャネルに最初にサブスクライブしたユーザーによって有効化されます。

chatClient.Subscribe("specialChannel", creationOptions: new ChannelCreationOptions { PublishSubscribers = true });

クライアントは、正常にサブスクリプションが行われたか、またはイベントを経由しなかったか把握します。 通常のパブリックチャネルと同じコールバックを使用して通知できます:

IChatClientListener.OnSubscribed(string[] channels, bool[] results)

パブリックvはネル内でPublishSubscribersが有効になっている場合、サブスクライブしているクライアントは前もってサブスクライブ済のユーザーのリストを受け取ります。また、同じチャネルからユーザーがサブスクライブを解除したり新しいユーザーがサブスクライブすると、毎回クライアントはイベントを使って通知を受け取ることになります。サブスクライバの初期リストと、サブスクライバのリストに変更があった際の将来のイベントの2つのメカニズムでPublishSubscribers機能は構成されています。このメカニズムによってクライアントは、常にパブリックチャネルごとの最新のサブスクライバリストを使用できます。

パブリックチャネルがPublishSubscribersを有効にしたか調べるには、チャネルクラスのプロパティもしくは同じ名前を持つフィールドを使用します。例:C#のSDKではChatChannel.PublishSubscribersです。

パブリックチャネルのサブスクライバのリストを取得するにはチャネルクラスのプロパティもしくは同じ名前を持つフィールドを使用します。 例:C#のSDKではChatChannel.Subscribersです。

サブスクライバリストの変更について通知を受け取るには、次のようにコールバックにサブスクライブします:

IChatClientListener.OnUserSubscribed(string channel, string user)

および

IChatClientListener.OnUserUnsubscribed(string channel, string user)

MaxSubscribersはPublishSubscribersと並行して使用できます。

chatClient.Subscribe("evenMoreSpecialChannel", creationOptions: new ChannelCreationOptions { PublishSubscribers = true, MaxSubscribers = 16 })

ただし、組み合わせる場合、MaxSubscribersは1000が上限となります。 つまり、PublishSubscribersが有効になっている場合、クライアントが設定できるMaxSubscribersは0から1000です。 クライアントがMaxSubscribersを に設定した場合、パブリックチャネルのMaxSubscribersは1000に設定されます。

Back To Top

マッチメイキングスロットの予約

プレイヤーはフレンドも同様に参加することを分かった上でルームに入る場合があります。 スロット予約を使用すると、Photonは特定のユーザー用にスロットをブロックし、マッチメイキングの際に考慮します。 スロットを予約するには、ルームに参加する際のメソッド(JoinRoomJoinOrCreateRoomJoinRandomRoomおよびCreateRoom)で取得するexpectedUsersパラメータがあります。

誰かが参加すると分かっている場合は、UserIDの配列を渡します。 JoinRandomRoomの場合、サーバーはあなたと参加を予定しているプレイヤー(また、既にルームにいるアクティブなプレイヤーや予測されるプレイヤー)のために十分なスロットのあるルームを探そうとします。 現在のexpectedUsersが変更された場合、サーバーはルーム内のクライアントに対してそれを更新します。

ルーム内の予想されるユーザーのリストを更新できます(1人以上のユーザーを追加または削除します)。これは、よく知られたルームプロパティを介して行われます。 (C#SDKでは、 Room.ExpectedUsersを取得および設定できます)。

スロット予約に対応するには、ルーム内のUserIDのパブリッシュを有効化する必要があります。

Back To Top

使用例:チームマッチメイキング

これは、マッチメイキングでチームをサポートする際に使用できます。 チームのリーダーが実際のマッチメイキングをおこないます。 リーダーがルームに参加し、すべてのメンバーにスロットを予約できます:

ランダムルームを検索するには:

なにも見つからない場合には、新規作成します:

他のプレイヤーはマッチメイキングをする必要はありませんが、以下を繰り返し呼ぶ必要があります:

リーダーがルームに到着すると、FindFriends オペレーションによってルーム名が明らかになり、すべてのプレイヤーがそのルームに参加可能となります:

Back To Top

フレンド

  • Friends' UserIDs are case sensitive. Example: "mybestfriend" and "MyBestFriend" are two different UserIDs for two different friends. フレンドのユーザーIDは大文字と小文字を識別します。 :次の二つは異なるフレンドのユーザーIDです。 "mybestfriend" と "MyBestFriend"

  • 同じAppIDや同じPhoton Cloudのリージョンに接続したフレンド、または同じPhotonアプリケーションのバージョンでプレイするフレンドのみが、使用しているデバイスやプラットフォームに関わらず、互いに検索することができます。
  • FindFriendsマスターサーバーに接続しているときのみ動作します。クライアントがルームに参加しているときは動作しません。