기존 방 입장하기¶
기존 방에 입장하는 방법은 여러 가지입니다.
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 애플리케이션 정보 탭에서 볼 수 있는 실제값으로 바꿔야 합니다.