기존 방 입장하기

기존 방에 입장하는 방법은 여러 가지입니다.

JoinRandomRoom

가장 쉬운 방법은 StrixNetwork 싱글톤에서 JoinRandomRoom 메서드를 호출하는 것입니다. 여기에는 두 오버로드가 있습니다. 제공해야 하는 인수는 방에서 현재 클라이언트를 표시하기 위해 만들어지는 방 멤버의 속성뿐입니다.

오버로드 중 하나가 전체 RoomMemberProperties 개체를 수락합니다.

void JoinRandomRoom(RoomMemberProperties memberProperties, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

다른 하나는 새 방 멤버의 이름만 지정할 수 있습니다.

void JoinRandomRoom(string playerName, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

이 메서드의 단점은 그 이름에서 추론할 수 있듯이 방이 무작위로 선정된다는 것입니다. 들어갈 방을 지정할 수는 없습니다. 게임에서 방 종류는 JoinRandomRoom 한 가지뿐이며, 매치메이킹은 100% 무작위입니다.

JoinRoom

방에 입장하는 방법으로 더 일반적인 것은 StrixNetwork에서 JoinRoom을 호출하는 것입니다.

void JoinRoom(string host, int port, string protocol, long roomId, string playerName, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

이를 위해서는 먼저 입장하려는 방의 ID와 이 방이 있는 방 서버의 주소, 포트를 알아야 합니다. 검색 기능 중 하나를 이용하여 방을 검색하면 알 수 있습니다.

void SearchRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchRoom(ICondition condition, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchJoinableRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchJoinableRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

방 검색하기 섹션에서 검색 기능을 자세히 확인할 수 있습니다.

검색하면 RoomInfo 인스턴스가 결과로 나옵니다. 이 인스턴스 각각에는 해당 방에 입장할 때 필요한 정보와 방 속성 등 추가 정보가 들어 있습니다. 필요한 필드는 다음과 같습니다.

  • host

  • port

  • protocol

  • roomId

JoinRoom 메서드에는 RoomJoinArgs 개체를 인정하는 더 일반적인 버전도 있습니다. 다른 것과 달리 이 버전에서는 방에 비밀번호가 설정되어 있을 때 비밀번호를 제시할 수 있습니다.

void JoinRoom(RoomJoinArgs args, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

또, 외부 허가 서버 URL도 제시할 수 있습니다. 여기에 관한 더 자세한 사항은 커스텀 허가 섹션을 참조해 주십시오.

멤버 속성

방에 입장하려면 플레이어가 멤버 속성으로 본인 확인을 해야 합니다.

필수 멤버 속성

이름

타입

설명

name

String

방 멤버의 이름

코드 예시

public class StrixJoinRoomExample : MonoBehaviour
{
    void Start()
    {
        var strixNetwork = StrixNetwork.instance;

        // 플레이스홀더 값. 이것을 실제 애플리케이션 ID로 변경
        // Strix Cloud 애플리케이션 정보에서 확인 가능: https://www.strixcloud.net/app/applist
        strixNetwork.applicationId = "00000000-0000-0000-0000-000000000000";

        // 먼저 마스터 서버로 연결
        strixNetwork.ConnectMasterServer(
            // 플레이스홀더 값. 이것을 실제 마스터 호스트 이름으로 변경
            // Strix Cloud 애플리케이션 정보에서 확인 가능: https://www.strixcloud.net/app/applist
            host: "000000000000000000000000.game.strixcloud.net",
            connectEventHandler: _ => {
                Debug.Log("Connection established.");

                // 마스터 서버에 연결한 후에는 해당 서버에서 방 찾기 가능
                strixNetwork.SearchJoinableRoom(
                    condition: null,                                            // 방 전체 검색
                    order: new Order("memberCount", OrderType.Ascending),       // 첫 번째 방에 사람이 제일 적도록 정렬
                    limit: 10,                                                  // 결과는 10개뿐
                    offset: 0,                                                  // 맨 처음 있는 것부터 시작
                    handler: searchResults => {
                        var foundRooms = searchResults.roomInfoCollection;
                        Debug.Log(foundRooms.Count + " rooms found.");

                        // 방을 찾지 못했다면 오류 인쇄
                        if (foundRooms.Count == 0) {
                            Debug.LogError("No joinable rooms found.");
                            return;
                        }

                        // 찾은 방 중에서 첫 번째 방에 입장
                        var roomInfo = foundRooms.First();

                        strixNetwork.JoinRoom(
                            host: roomInfo.host,
                            port: roomInfo.port,
                            protocol: roomInfo.protocol,
                            roomId: roomInfo.roomId,
                            playerName: "My Player Name",
                            handler: __ => Debug.Log("Room joined."),
                            failureHandler: joinError => Debug.LogError("Join failed. Reason: " + joinError.cause)
                        );
                    },
                    failureHandler: searchError => Debug.LogError("Search failed. Reason: " + searchError.cause)
                );
            },
            errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
        );
    }
}

참고

위 예가 제대로 작동하려면 마스터 서버에 활성 상태인 방이 등록되어 있어야 합니다. 그러나 남아 있는 멤버가 없으면 방이 삭제되므로, 클라이언트가 적어도 둘은 있어야 합니다. CreateRoom으로 다른 게임 인스턴스에서 매치 방을 만든 후에 위 예를 실행해도 됩니다. 그러지 않으면 이용 가능한 방이 없어 검색이 실패합니다. 또, applicationIdhost의 플레이스홀더 값은 Strix Cloud 애플리케이션 정보 탭에서 볼 수 있는 실제값으로 바꿔야 합니다.