로비 만드는 방법

로비란 플레이어들이 게임에 참여할 때까지 기다리는 방을 말합니다. Strix Unity SDK로 방을 만들 때는 CreateRoom() 메서드를 이용합니다. 다음은 방을 만드는 방법을 보여주는 코드입니다. 로비로 만들 때 유용하게 사용할 수 있는 속성이 몇 가지 있습니다.

StrixNetwork.instance.CreateRoom(
    new RoomProperties {
        name = "New Room",
        capacity = 4,
        key1 = 0            // 처음 평균 스킬 레벨은 0
    },
    new RoomMemberProperties {
        name = "Player name",
        properties = new Dictionary<string, object>() {
            { "state", 0 }  // 처음 state는 "Not Ready"
        }
    },
    args => {
        Debug.Log("CreateRoom succeeded");
    },
    args => {
        Debug.Log("CreateRoom failed. error = " + args.cause);
    }
);

위 보기에서 로비에 중요한 속성은 key1state입니다.

key1은 방 멤버의 평균 스킬 레벨이고 state는 특정 멤버의 준비 상태(0은 준비되지 않음, 1은 준비 완료)를 나타냅니다.

참고

아무 값이나 사용해도 되지만 커스텀 속성은 검색할 수 없습니다. 이 정보를 방 밖에 있는 사람에게 제공하고 싶다면 키 값 중에서 하나를 이용하면 됩니다.

방을 만들기 전에 마스터 서버에 연결되어 있어야 합니다. 방이 만들어지고 나면 클라이언트가 방에 자동으로 입장합니다. 첫 클라이언트가 방장 권한을 받게 됩니다. 즉 방 정보 업데이트, 멤버 퇴장 등의 권한이 생깁니다.

방 멤버가 게임을 할 준비가 되면 준비 상태로 바뀝니다. 예시

// 방 멤버 상태 변경: 0 - preparation, 1 - ready
StrixNetwork.instance.SetRoomMember(
    StrixNetwork.instance.selfRoomMember.GetPrimaryKey(),
    new Dictionary<string, object>() {
        { "properties", new Dictionary<string, object>() {
            { "state", state }
        } }
    },
    args => {
        Debug.Log("SetRoomMember succeeded");
    },
    args => {
        Debug.Log("SetRoomMember failed. error = " + args.cause);
    }
);

여기서 selfRoomMember는 서버에 연결된 현재 클라이언트의 CustomizableMatchRoomMember 인스턴스입니다. 방에 입장한 후 초기화됩니다. 위 예에서 방 멤버는 state 속성으로 0과 1을 수락할 수 있습니다. 애플리케이션에서는 다른 값이나 다른 속성 이름을 사용할 수 있습니다.

참고

SetRoomMember 메서드에서는 인수로 전달된 딕셔너리에 따라 멤버 속성값을 업데이트하도록 서버에 요청합니다. 딕셔너리에 지정되지 않은 속성은 바뀌지 않습니다. 외부 딕셔너리의 "속성" 키에 대한 값으로 저장된 커스텀 속성도 마찬가지입니다. 즉 커스텀 속성이 복수였다면 "state" 외에 커스텀 속성의 값은 위 코드로 바뀌지 않습니다.

방장을 포함하여 멤버 모두가 준비를 마친 후에 게임을 시작하는 것이 좋습니다(멤버 전체가 준비 완료될 때까지 기다리는 방법 참조).

이 게임에서는 다른 멤버가 방에 입장해야 합니다. 멤버는 JoinRoom() 메서드로 방에 입장할 수 있습니다.

StrixNetwork.instance.JoinRoom(
    new RoomJoinArgs {
        host = "127.0.0.1",
        port = 9123,
        protocol = "TCP",
        roomId = 1
    },
    args => {
        Debug.Log("JoinRoom succeeded");
    },
    args => {
        Debug.Log("JoinRoom failed. error = " + args.cause);
    }
);