게임 종료 후, 이전 로비로 돌아오도록 로비를 개선해주었습니다.
해당 개선으로 인해, LobbyManager가 씬을 넘어갈 때 파괴되지 않도록 변경되었습니다.
로비 매니저 추가 내용입니다.
게임 종료후, p2p 연결을 끊으면서 BackToLobby 메서드를 호출, 로비의 키 값을 대기중으로 변경해줍니다.
//게임 종료후, 로비 재참여
public async void BackToLobby()
{
if (!IsLobbyhost()) return;
try
{
Lobby lobby = await Lobbies.Instance.UpdateLobbyAsync(nowLobby.Id, new UpdateLobbyOptions
{
//로비의 GameStartKey 대기중 키로 변경
Data = new Dictionary<string, DataObject>
{
{networkKey.GameStartKey, new DataObject(DataObject.VisibilityOptions.Member, networkKey.ReadyKey) }
}
});
nowLobby = lobby;
}
catch (Exception e)
{
Debug.Log(e);
LeaveLobby();
}
}
public void CreateLobbyUI()
{
LobbyUI ui = UIManager.Instance.CreateUI<LobbyUI>();
ui.Show();
}
또한, 로비로 돌아오면서 로비씬에 있던 로비 UI를 다시 생성해줄 필요가 있기 때문에, 로비 매니저에 UI 생성기능을 추가해주었습니다.
로비 매니저의 업데이트문 변경점 입니다.
protected override void Update()
{
base.Update();
MaintainLobbyAlive();
if (nowLobby != null && IsPlaying == false)
{
RefreshLobbyInfo();
}
}
게임 진행중임을 확인하는 용도의 플래그 변수, IsPlaying 을 만들고, 해당 플래그가 true 일 경우, 로비 정보를 업데이트하지 않도록 변경해주었습니다.
MaintainLobbyAlive() 메서드의경우, UGS에서 로비를 유지할 수 있도록 25초마다 신호를 보내는 메서드이기 때문에, 게임 진행중에도 호출되어야하는 메서드이기 때문에 별도의 처리를 하지 않았습니다.
트러블슈팅
- 로비UI 가 다시 불러와지지 않는 문제
- 로비 UI 생성이 Start에서 진행된 후, 별도로 로비를 호출하지 않아서 발생하는 문제였습니다.
- 별도로 메서드를 만들어준 뒤, 씬 로드가 끝나면 UI를 생성하도록 변경하여 해결해주었습니다.
- 클라이언트의 로비 UI가 빈 상태인 문제
- 기존 로비를 다시 불러오는 Update문의 조건문을 로비 데이터의 게임 키로 진행했었습니다. 그 결과로 호스트측에서 로비 데이터를 변경했지만, 클라이언트측이 로비 업데이트를 진행하지 않아서 변경된 데이터를 받지 못하고 로비 업데이트를 하지 않는 문제가 발생했습니다.
- 별도의 플래그 변수로 로비 정보 업데이트 조건을 변경하여 해결하였습니다.
//문제 코드 : 클라이언트가 로비 정보를 받아오지 못하게됨
protected override void Update()
{
base.Update();
MaintainLobbyAlive();
if (nowLobby != null && nowLobby.Data[networkKey.GameStartKey].Value == networkKey.ReadyKey)
{
RefreshLobbyInfo();
}
}
'내일배움캠프 > 프로젝트' 카테고리의 다른 글
팀 프로젝트 - 게임 종료후 씬 이동 문제 해결 (0) | 2024.12.26 |
---|---|
팀 프로젝트 - 게임 오버 메커니즘 (0) | 2024.12.24 |
팀 프로젝트 - 퍼즐 정보 관련 인터페이스화 (0) | 2024.12.23 |
팀 프로젝트 - 퍼즐 관련 멀티플레이 연결 (1) | 2024.12.19 |
팀 프로젝트 - 유령 배치, Navmesh 동적 생성 (0) | 2024.12.17 |