게임개발일지/리그오브워치

[리그오브워치개발일지] #13 유저 인터페이스 : 캐릭터 선택 (3) 선택 규칙

김진우 개발일지 2023. 12. 11. 17:36

Git

레포지토리 주소 : https://github.com/kjinwoo12/UE5Game_LeagueOfWatch
기준 태그 : 13_TeamSelectionRule_bugfix

요구사항 확인

이전글에서는 매치메이킹이 완료된 것을 가정하고 서버에 매칭된 유저가 UI를 통해 캐릭터를 선택하고 확인할 수 있는 기능을 완성했다. 하지만 UI만 완성했을 뿐 캐릭터 선택 전체를 완성한 것은 아니다. 캐릭터 선택 전체를 완성하기 위해서는 캐릭터 선택 화면에서 발생할 수 있는 다양한 상황에 대처해야 한다. 예를 들어 캐릭터 선택 도중에 플레이어가 나간다거나, 캐릭터를 선택하지 못하고 선택 제한시간이 지난 상황에서 각각의 클라이언트에게 적절한 화면을 띄워줘야 한다. 또, 캐릭터 선택이 정상적으로 완료되었을 때 인게임 레벨로 전환해 게임을 시작하도록 만들어야 한다.

요구사항을 자세히 정리하면 아래와 같다.

  1. 캐릭터 선택 완료 후 인게임 레벨로 전환
  2. 선택 제한시간 추가
  3. 예외처리
    • 도중에 플레이어가 접속 종료했을 때 처리
    • 제한시간 내에 캐릭터를 선택하지 못했을 때 처리

기능 구현

캐릭터 선택 완료 후 인게임 레벨로 전환

모든 유저가 캐릭터 선택을 완료했다면 인게임 레벨로 전환해야 한다. 보통 레벨을 변경할 때에는 OpenLevel을 사용하지만 서버에서 사용한다면 모든 클라이언트의 연결이 끊기고 서버의 레벨만 변경되기 때문에 다른 방법을 사용해야 한다. 서버에서 클라이언트와 함께 접속을 유지한 상태로 레벨을 변경하려면 Execute Console Command 노드를 사용해야 한다.

ServerTravel [레벨이름] 문자열을 Command 파라미터에 전달하면 [레벨이름]에 해당하는 레벨로 클라이언트와 함께 이동할 수 있다.

참고자료

선택 제한시간 추가

#4 기본 게임 규칙 구현 : 미니언 생성에서 만들었던 타이머를 사용해 선택 제한시간을 잰다. 제한시간이 지나면 플레이어를 서버에서 로그아웃하고 EntryLevel로 돌아온다.

데디케이트 서버에서 플레이어를 따로 로그아웃하는 방법은 단순히 Open Level을 호출함으로써 서버와 연결을 끊는 것이다. Logout노드는 데디케이트 서버에서 작동하지 않으니 주의해야 한다.

예외처리

두 가지의 예외가 존재한다.

  • 도중에 플레이어가 접속 종료했을 때
  • 제한시간 내에 캐릭터를 선택하지 못했을 때

이 경우 모두 모든 플레이어를 Entry로 레벨을 옮기고 서버를 종료한다.

완성된 모습