기존 방 입장하기¶
기존 방에 입장하는 방법은 여러 가지입니다.
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도 제시할 수 있습니다. 여기에 관한 더 자세한 사항은 커스텀 허가 섹션을 참조해 주십시오.
코드 예시¶
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으로 다른 게임 인스턴스에서 매치 방을 만든 후에 위 예를 실행해도 됩니다. 그러지 않으면 이용 가능한 방이 없어 검색이 실패합니다. 또, applicationId와 host의 플레이스홀더 값은 Strix Cloud 애플리케이션 정보 탭에서 볼 수 있는 실제값으로 바꿔야 합니다.