UserID와 친구

UserID

Photon에서, 플레이어는 고유한 UserID를 사용하여 식별됩니다.

이 UserID는 룸 내와 밖에서 유용합니다. 동일한 UserID를 가진 Photon 클라이언트가 동일한 서버에 연결할 수 있지만 동일한 UserID를 사용하는 두 개의 클라이언트는 동일한 Photon룸에 참여할 수 없습니다. 방 안에 있는 각각의 액터들의 ID는 고유해야 합니다. 기존 클라이언트 SDK에서는 RoomOptions.CheckUserOnJoin을 사용하여 이 기능을 활성화했습니다.

유일한 UserID

일반적으로 사용자 ID는 사용자이름, 표시이름 또는 닉네임과 같이 화면에 나타나지는 않습니다. UserID는 사람이 읽기 쉬울 필요는 없으며 사용자 친화적일 필요도 없습니다. 예를 들어 GUID를 사용자 ID로 사용할 수 있습니다.

플레이어마다 고유한 UserID를 유지할 때의 이점:

  • 게임 세션 간에 또는 여러 기기 간에 데이터를 보존할 수 있습니다. 룸에 다시 가입하고 중지한 위치에서 다시 플레이 할 수 있습니다.
  • 만났던 모든 플레이어들에게 알려지며 누구나 쉽게 알아볼 수 있습니다. 친구들과 플레이, 초대장 보내기, 도전하기, 온라인 파티 만들기, 팀과 길드 만들기를 할 수 있습니다. 사용자 프로필(예:경험, 통계, 성과, 레벨 등)을 추가하고 게임을 더욱 어렵게 만들 수 있습니다(예:토너먼트 및 리더 보드 사용).
  • PhotonUserID를 외부 고유 식별자로 사용하여 다른 서비스와 바인딩하여 사용할 수 있습니다. 예를 들어 Photon User ID를 Facebook ID, Google ID, Steam ID, PlayFab ID등으로 설정할 수 있습니다.
  • 사용자 ID에 대한 블랙리스트를 만들어 어플리케이션에 연결하는 악의적인 사용자를 금지할 수 있습니다. 사용자 지정 인증참고.

UserID 설정하기

The UserID for a client can be set in three ways:

인증후에, Photon 클라이언트는 연결이 끊어질 때까지 동일한 UserID를 유지할 것 입니다. 클라이언트의 UserID는 3가지 방식으로 설정할 수 있습니다:

  1. 클라이언트는 AuthenticationValues.UserId 을 설정하여 연결전에 UserID를 전송합니다. 이 옵션은 사용자 지정 인증 을 사용하지 않고 UserID를 설정하기 원하는 경우에 유용합니다.
  2. 외부 인증 공급자는 성공적인 인증시에 UserID를 리턴합니다. 사용자 지정 인증참고. 클라이언트가 전송한 모든 값이 오버라이드 될 것 입니다.
  3. Photon 서버는 1 또는 2의 방법을 사용하여 UserID를 얻지 못하면 사용자의 ID로 GUID를 할당할 것 입니다. 따라서 익명의 사용자도 UserID를 갖게될 것 입니다.

UserID 게시

플레이어들은 룸안에서 서로의 사용자 ID를 공유할 수 있습니다. 이 기능을 사용하고 UserID를 모든 사용자에게 표시하려면 룸을 생성할 때 RoomOptions.PublishUserIdtrue로 설정합니다. 서버는 이 정보를 각 새롭게 참여할 때 브로드캐스팅하며 사용자는 PhotonPlayer.UserId 를 사용하여 각 플레이어의 UserID에 접근 할 수 있습니다.

친구

사용하는 기기, 플랫폼에 관계없이 동일 Photon Cloud 지역, 동일한 AppID, 동일한 Photon AppVersion 으로 연결을 하면 친구들을 찾을 수 있습니다.

같은 게임을 하고 있는 친구들이 온라인 상에 있는지, 있다면 어느 룸에 참여하고 있는지를 알 수 있습니다. 사용자와 마찬가지로 친구들도 UserID로 식별됩니다. FriendID는 UserID와 같은 것이고 친구를 찾기 위해서는 먼저 UserID를 알아야 합니다. 그런 다음 다음을 사용하여 사용자 ID목록을 Photon 서버로 보낼 수 있습니다.

loadBalancingClient.FindFriends(friendsUserIds);

You can then get the response sent from the server as follows: 서버에서 보낸 응답은 다음과 같이 받을 수 있습니다:

If you are extending LoadBalancingClient class then override OnOperationResponse and add the following code snippet. You could also make use of the event LoadBalancingClient.OnOpResponseAction and add the following snippet to the implemented callback instead.

LoadBalancingClient 클래스를 확장할 경우 OnOperationResponse를 오버라이드하고 다음 코드를 추가합니다. 또한 LoadBalancingClient.OnOpResponseAction 이벤트를 이용하고 콜백을 구현하기 위해서는 다음 코드를 추가합니다.

swith(operationResponse.OpCode)
{
    case OperationCode.FindFriends:
        if (operationResponse.ReturnCode == 0)
        {
            bool[] statusArray = operationResponse[ParameterCode.FindFriendsResponseOnlineList] as bool[];
            string[] roomsArray = operationResponse[ParameterCode.FindFriendsResponseRoomIdList] as string[];

            for (int index = 0; index < this.FriendList.Count; index++)
            {
                // replace with your custom logic
                Debug.LogFormat("Friend with UserId={0} is {1}{2}", this.FriendList[i], statusArray[i] ? "online" : "offline", 
                    string.IsNullOrEmpty(roomsArray[i]) ? string.Empty : string.Format(" joined to room=\"{0}\"", roomsArray[i]));
            }
        }
        break;
}

Photon does not persist friends lists. You may need an external service for that.

Photon은 친구 목록을 유지하지 않습니다. 친구목록 유지를 위해 외부 서비스가 필요할 수도 있습니다.

Since Photon does not keep track of your userbase, any non existing user in your game will just be considered offline. A friend is considered online only when he/she is connected to Photon at the time of making the FindFriends query. A room name will be returned per user if the latter is online and joined to the room with the same name.

Photon은 사용자 기반을 추적하지 않으므로 게임에 존재하지 않는 사용자는 오프라인 상태로 간주됩니다. FindFriends 쿼리를 하는 시간에 연결되어 있는 플레이어만이 온라인으로 간주됩니다. 사용자가 온라인 상태이고 동일한 이름으로 룸에 참여한 경우 사용자별로 룸 이름이 리턴됩니다.

 기술문서 TOP으로 돌아가기