게임을 켜면 보통 로비화면이 나온다. 왜 로비 화면을 켜주나요? 바로 게임 시작하면 되지 않슴?
물론 프로그램을 실행하면 바로 게임이 실행되는 경우도 있다. 옛날에 핀볼이나 지뢰찾기가 그랬었음. 이런 게임은 로비가 있는 게임과 비교해보면 비교적 단순하고 직관적인 게임이라는 차이점이 있다. 그럼 단순하고 직관적인 게임은 로비가 안 필요한거에요? 얼추 맞는 이야기일 수도 있다. 로비가 필요하지 않으려면 단순하고 직관적인 것보다 어떤 조건이 필요하다.
핀볼은 로비 화면이 없다. 프로그램을 실행시키면 바로 시작임. 게임에서 패배해도 다시 시작하는 버튼을 누르면 바로 다시 게임을 실행할 수 있다. 또 어느 컴퓨터나 어느 시간에 켜더라도 항상 같은 플레이 방식으로 진행된다. 내가 바꿀 수 있는 옵션이라곤 소리를 켜고 끄는것 뿐이다. 어느 경우에나 동일한 플레이 환경인 것.
근데 리그 오브 레전드는 게임 시작 전에 할 게 굉장히 많음. 모드 고르랴, 라인 고르고, 또 챔피언도 고른 다음에 룬과 특성도 골라야 된다. 이런 설정을 게임 환경에 전달하여 매 번 다른 플레이 환경이 만들어지기 때문에 로비와 게임을 분리한다고 볼 수 있겠다.
그럼 로비가 기본적으로 해야 할 일은? 게임 시작 전 게임에 필요한 설정 값을 관리하고, 게임으로 씬이 전환될 때에 게임에 필요한 정보를 전달해 주는 역할을 맡아서 하면 됨. 근데 사실 요새는 이거 말고도 다른 일도 많이 하더라.
로비화면은 진짜 게임에 따라 천차만별이다. 어떤 게임을 만들건지에 따라 필요한 기능이 완전히 다르니까. 그래서 간단하게 구조에 대해서만 알아보고 세부적인 내용은 개인이 필요한 규격에 맞춰서 만들어야함.
using UnityEngine;
public class LobbyManager : MonoBehaviour
{
// UI 데이터 처리 로직
// ex) 게임씬으로 전환 시 전달할 데이터 가공
}
using UnityEngine;
public class LobbyController : MonoBehaviour
{
// UI 사용자 인터렉션 로직
// ex) 세팅 버튼 클릭시 세팅 팝업 UI 띄우기
private void Update()
{
// 사용자가 뒤로가기 버튼을 누르면 최상단에 켜져있는 팝업 UI를 닫아주는 메서드
// 활성화된 팝업 UI가 없으면 게임 종료 팝업을 띄우면 됨.
}
}
UI에서 필요한 데이터는 UIManager에게, 사용자가 UI에서 하는 인터렉션은 UIController에게 위임하여 분리한다. 이러한 방식으로 로비 화면의 각 기능을 적절히 분리하여 관리하면, 확장과 유지보수에 유연하게 대처할 수 있게 될 듯. 근데 내가 로비를 분리할 정도 규모의 게임을 만들거냐 하면 흠... 그것도 다시 고민해봐야 될 부분임.