PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

ユーザーIDとフレンド

ユーザーID

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

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

ユーザーIDはルーム内外で活用できます。 Photonクライアントは同じユーザーIDで同じサーバーに接続できます。しかし同じユーザーIDを使用して、2つのクライアントから同じPhtonのルームに参加することはできません。 ルーム内の各アクターは一意のユーザーIDを持つ必要があります。 以前のクライアントSDKでは、これはRoomOptions.CheckUserOnJoinを使用して有効化されていました。

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を持つことになります。
PUN1では、接続前にユーザーIDが割り当てられていない場合、ニックネームの値があればそれに設定されます。

Back To Top

ユーザーIDを発行

プレイヤーはルーム内で互いにユーザーIDを共有できます。 これを有効化し、すべてのプレイヤーがそのユーザーIDを見えるようにするには、ルーム作成時にRoomOptions.PublishUserIdtrueに設定します。 その後、新たに参加されるたびにサーバーはこの情報を送信します。このため、PhotonPlayer.UserIdを使用すれば各プレイヤーのユーザーIDにアクセスできます。

Back To Top

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

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

// create room example
PhotonNetwork.CreateRoom(roomName, roomOptions, typedLobby, expectedUsers);
// join room example
PhotonNetwork.JoinRoom(roomName, expectedUsers);
// join or create room example
PhotonNetwork.JoinOrCreateRoom(roomName, roomOptions, typedLobby, expectedUsers);
// join random room example
PhotonNetwork.JoinRandomRoom(expectedProperties, maxPlayers, expectedUsers, matchmakingType, typedLobby, sqlLobbyFilter, expectedUsers);

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

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

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

Back To Top

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

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

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

PhotonNetwork.JoinRandomRoom(expectedProperties, maxPlayers, expectedUsers, matchmakingType, typedLobby, sqlLobbyFilter, expectedUsers);

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

PhotonNetwork.CreateRoom(roomName, roomOptions, typedLobby, teamMembersUserIds);

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

PhotonNetwork.FindFriends(new string[1]{ leaderUserId });

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

PhotonNetwork.JoinRoom(roomNameWhereTheLeaderIs);

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アプリケーションのバージョンでプレイするフレンドのみが、使用しているデバイスやプラットフォームに関わらず、互いに検索することができます。

同じゲームをプレイしているオンライン中のフレンドを検索でき、またそれらのフレンドがどのルームに参加しているかを検索できます。 ユーザーと同様に、フレンドもユーザーIDを使用して識別されます。 つまりフレンドIDはユーザーIDと同一で、フレンドを見つけるにはまず、そのフレンドのユーザーIDを把握する必要があります。 その後、以下を使用してユーザーIDのリストを送信できます:

using UnityEngine;

public class FindFriendsExample : MonoBehaviour
{
    public bool FindFriends(string[] friendsUserIds)
    {
        return PhotonNetwork.FindFriends(friendsUserIds);
    }

    private void OnUpdatedFriendList()
    {
        for(int i=0; i < PhotonNetwork.Friends.Count; i++)
        {
            FriendInfo friend = PhotonNetwork.Friends[i];
            Debug.LogFormat("{0}", friend);
        }
    }
}

Photonはフレンドリストを保持しません。

フレンドリストを保持するには、外部サービスが必要です。

Photonはユーザーベースをトラッキングしないため、ゲームに存在しないユーザーは単純にオフラインであるとみなされます。

FindFriendsクエリを作成時に、Photonに接続しているフレンドのみが、オンラインであるとみなされます。 後者がオンライン中で、同じ名前でルームに参加した場合には、ユーザーごとにルーム名が返されます。

To Document Top