#1. Get joined lobbies
GetJoinedLobbies API를 이용해서 Lobby를 선택할 수 있습니다
이 API는 현재 활동중인 플레이어가 현재 속한 로비를 위한 로비 ID의 List를 반환해준다!
이 API는 예기치 못한 끊김에 사용될 수 있습니다
예기치 못한 끊김(충돌이나 사용자가 로비에서 연결을 끊는 등)이 발생할 때,
플레이어가 속한 모든 로비 목록을 가져오기 위해 API를 사용할 수 있고,
API를 사용하여 전체 로비 세부 정보를 회복(?)하거나 로비에 다시 연결할 수 있습니다!
try
{
var lobbyIds = await LobbyService.Instance.GetJoinedLobbiesAsync();
}
catch (LobbyServiceException e)
{
Debug.Log(e);
}
GetJoinedLobbiesAsync()
#2. Update lobby data
로비 호스트는 로비의 데이터를 Update시킬 수 있는 유일한 Player입니다
다른 플레이어들은 Visibility한 Option에 따라 로비 데이터를 볼 수 있습니다
try
{
UpdateLobbyOptions options = new UpdateLobbyOptions();
options.Name = "testLobbyName";
options.MaxPlayers = 4;
options.IsPrivate = false;
//Ensure you sign-in before calling Authentication Instance
//See IAuthenticationService interface
options.HostId = AuthenticationService.Instance.PlayerId;
options.Data = new Dictionary<string, DataObject>()
{
{
"ExamplePrivateData", new DataObject(
visibility: DataObject.VisibilityOptions.Private,
value: "PrivateData")
},
{
"ExamplePublicData", new DataObject(
visibility: DataObject.VisibilityOptions.Public,
value: "PublicData",
index: DataObject.IndexOptions.S1)
},
};
var lobby = await LobbyService.Instance.UpdateLobbyAsync("lobbyId", options);
//...
}
catch (LobbyServiceException e)
{
Debug.Log(e);
}
UpdateLobbyOptions options = new UpdateLobbyOptions(); 로 업데이트할 옵션을 수정한 후
var lobby = await LobbyService.Instance.UpdateLobbyAsync("lobbyId", options); 를 통해 싱크를 맞춰주면 됩니당
#3. Update player data
플레이어들은 로비 안에서 자신의 데이터를 Update할 수 있습니다
로비 호스트와 다른 플레이어들은 Visibilty Option Data에 따라 Player Data를 읽을 수 있습니다
try
{
UpdatePlayerOptions options = new UpdatePlayerOptions();
options.Data = new Dictionary<string, PlayerDataObject>()
{
{
"existing data key", new PlayerDataObject(
visibility: PlayerDataObject.VisibilityOptions.Private,
value: "updated data value")
},
{
"new data key", new PlayerDataObject(
visibility: PlayerDataObject.VisibilityOptions.Public,
value: "new data value")
}
};
//Ensure you sign-in before calling Authentication Instance
//See IAuthenticationService interface
string playerId = AuthenticationService.Instance.PlayerId;
var lobby = await LobbyService.Instance.UpdatePlayerAsync("lobbyId", playerId, options);
//...
}
catch (LobbyServiceException e)
{
Debug.Log(e);
}
UpdatePlayerOptions options = new UpdatePlayerOptions(); 를 통해 PlayerData 옵션을 수정하고
var lobby = await LobbyService.Instance.UpdatePlayerAsync("lobbyId", playerId, options); 를 통해 싱크를 맞춰주면 됩니당
#4. Query for lobbies
Query API를 이용해서 플레이어는 방 탐색에 도움을 받을 수 있습니다
그 방법에는
Sorting lobbies, Filtering lobbies이 있습니다
Sorting Lobby 예시로는, 플레이어가 최근에 생성된 로비만 보고 싶으면 Lobby가 만들어진 시간을 분류할 수 있습니다
Filtering Lobby 예시로는 파라미터를 이용해서 로비를 걸러낼 수 있는데요, Lobby의 이름, 방 인원수, 만들어진 Custom Data 등을 파라미터 설정해서 탐색할 수 있습니다
try
{
QueryLobbiesOptions options = new QueryLobbiesOptions();
options.Count = 25;
// Filter for open lobbies only
options.Filters = new List<QueryFilter>()
{
new QueryFilter(
field: QueryFilter.FieldOptions.AvailableSlots,
op: QueryFilter.OpOptions.GT,
value: "0")
};
// Order by newest lobbies first
options.Order = new List<QueryOrder>()
{
new QueryOrder(
asc: false,
field: QueryOrder.FieldOptions.Created)
};
QueryResponse lobbies = await Lobbies.Instance.QueryLobbiesAsync(options);
//...
}
catch (LobbyServiceException e)
{
Debug.Log(e);
}
QueryLobbiesOptions options = new QueryLobbiesOptions(); 를 이용해 원하는 로비 옵션을 Query하고
QueryResponse lobbies = await Lobbies.Instance.QueryLobbiesAsync(options); 를 통해 원하는 로비만 볼 수 있게 할 수 있습니다!
#5. Host migration
반장(Host) 주기(migration, 내가 임의로 해석함 ㅎㅎ..)은 다른 플레이어에게 로비 호스트를 주는 행위입니다
이 프로세스는 다음 시나리오에서 발생할 수 있습니다
- 로비의 반장이 새로운 반장 선택할 때 - UpdateLobby를 사용함으로써, 새로운 반장 플레이어의 ID 필드를 HostID로 Update함으로써
- 반장이 새로운 반장을 선택하지 않고 의도적으로 로비를 떠날 때
- Relay Integrations에 의해 비활성화되어서 반장이 삭제될 때
반장이 새로운 반장을 뽑는 명확한 시나리오가 없다면, 새로운 반장은 로비 안에있는 플레이어 중 랜덤하게 한 명이 선택되어 반장이 된다!
Note: If the host is removed due to inactivity, the underlying relay connection is destroyed. To continue receiving automatic disconnects, the new host must create a new relay, and then have the other players join it and set their Allocation ID/ Connection info per the instructions in the Relay integrations section.