03
26

 

게임을 만들다 보면 콘솔에다가 디버깅하는건 일상이다.

 

근데 맨날 Debug.log()해서 디버깅하기엔 우리가 알아야할 정보들이 너무 많다.

 

Quantum Console은 강력하고 사용하기 쉬운 게임 내 명령 콘솔이다.

 

코드에 [Command]를 추가하기만 하면 자신만의 명령과 개발자 치트를 콘솔에 추가할 수 있다고한다.

 

이 콘솔 에셋은 멀티 게임 만들 때 더 빛을 발휘한다.

 

런타임 중에 네트워크 상태를 모니터링하고 다양한 디버깅 정보를 볼 수 있다. 

 

예를 들어 네트워크 패킷, RPC 호출, 연결 및 끊기 이벤트, 옵젝 생성 및 파괴 이벤트 등을 모니터링 가능하다.

 

에셋 스토어 링크 ↓

https://assetstore.unity.com/packages/tools/utilities/quantum-console-211046?aid=1101l96nj&pubref=rev_quantum&utm_campaign=unity_affiliate&utm_medium=affiliate&utm_source=partnerize-linkmaker 

 

 


#1 사용법

 

이제부터 사용법을 간단하게 정리할텐데 에셋에 들어있는 설명pdf랑 똑같다 ↓

readme.pdf
0.13MB

 

 

우선 사용하기 위해선 TextMeshPro 패키지가 기본적으로 있어야한다.

 

콘솔 에셋을 나타낼 UI들이 다 TextMeshPro인것같다.

 

그리고 기본적인 Canvas를 생성할 때 EventSystem가 같이 생성되는데 만약에 없다면

 

유니티 에디터 상단 메뉴바에 GameObject -> UI -> EventSystem을 눌러 생성해주자

 

이제 에셋을 설치한 풀더, 즉, Assets/Plugins/QFSW/Quantum Console/Source/Prefabs

 

Plugins 풀더에 하위 디렉토리에 있는 Prefabs 풀더에 가보면 

 

이런식으로 두개의 프리팹이 있는걸 볼 수 있다.

 

Quantum Console (SRP)는 SRP 파이프라인을 지원하고

Quantum Console은 built-in 파이프라인을 지원한다.

 

테스트중인 프로젝트가 URP라 SRP 프리팹을 선택해서 월드에 끌어다 주자 

(URP는 SRP의 일종이라 호환가능)

 

프리팹을 끌어다주면 화면에 이렇게 콘솔창이 생긴걸 볼 수 있다.

 

이제 여기다가 명령어로 우리가 원하는걸 구현 가능하다.

 

이 상태에서 help라고 명령어를 쳐서 Submit 눌러보면 간략한 소개를 해준다.

 

1. 명령어 추가

 

우선 콘솔창에 커스텀 명령어를 추가해주기 위해서는 네임스페이스를 먼저 선언해야한다.

 

using QFSW.QC;

 

그리고 함수 이름을 명령어로 사용가능한데 스크립트에서 함수 위에 [Command] 키워드만 붙혀주면 된다.

 

[Command]
private void StopTime()
{
    Time.timeScale = 0f;
}
[Command]
private void RunTime()
{
    Time.timeScale = 1f;
}

 

이런식으로 선언해주면 아래와 같이 된다.

 

보다시피 콘솔창에서 함수명을 입력해 바로 호출가능하다.

 

참고로 마크 명령어 같은 느낌이라 stop까지만 입력하고 Tab을 눌러주면 자동완성도 지원해준다.

 

그리고 명령어는 굳이 함수명이 아니어도 이름을 다르게 지어줄 수 있다.

 

방법은 간단하다. 아까 [Command] 키워드에서 [Command ("원하는 이름")]  이런식으로 지어주면 된다.

 

[Command ("STOP")]
private void StopTime()
{
    Time.timeScale = 0f;
}
[Command ("RUN")]
private void RunTime()
{
    Time.timeScale = 1f;
}

 

이런식으로 STOPRUN이 명령어로 잘 인식이 된다.

 

그리고 개인적으로 한글로도 이름 지을 수 있지않을까 싶었는데

 

역시나 한글은 지원안하는건지 TextMeshPro폰트가 깨진다.

 

그러면 내가 자음모음 모든 한글 입력가능한 TextMeshPro 폰트를 만들어 넣으면 되는법

위에서 프리팹 풀더에 보면 Default Theme (SRP) 부분에서 테마를 바꿀 수 있다.

 

눌러서 인스펙터를 확인해보면 Font부분이 있는데 여기에 내가 만든 폰트를 넣었다.

 

그렇게 테스트를 해보았더니

아주 잘 되는 모습이다.

 

실제 게임에서 유저들이 사용할 수 있게 재밌는 한국어 명령어들을 넣으면 재밌을 듯하다.

 

2. 응용

그리고 에셋에서 time-scale [값] 입력하면 바로 timescale값을 설정 가능하도록 지원이 되어있다.

 

그렇기 때문에 기본적으로 에셋에서 지원하는 명령어들을 익혀두면 좋다.

 

모든 명령어를 한번에 볼 수 있는 명령어는 all-commands가 있다

이런식으로 명령어를 다 볼 수 있다.

 

각 명령어에 대한 설명은 man [명령어 이름] 식으로 적어주면 설명도 볼 수 있다.

 

참고로 우리가 추가한 명령어들도 설명을 적어주는게 가능하다.

 

방법은 간단하다. 함수 위에 [CommandDescription ("명령어 설명")]  이런식으로 선언해주면 된다.

[Command("STOP")]
[CommandDescription("It makes timescale to 0")]
private void StopTime()
{
    Time.timeScale = 0f;
}
[Command("RUN")]
[CommandDescription("It makes timescale to 1")]
private void RunTime()
{
    Time.timeScale = 1f;
}

이런식으로 우리가 적은 설명이 아주 잘 나오는 모습이다.

 

 

3. 코루틴 활용

그리고 명령어를 입력하고 나서 되묻거나 선택지를 제공하는것도 코루틴으로 구현 가능하다.

 

다만 QFSW.QC.Actions 네임스페이스를 선언해줘야만 한다.

 

선택지 선택 ↓

using QFSW.QC;
using QFSW.QC.Actions;
using System.Collections.Generic;
...

[Command("read-key")]
public static IEnumerator<ICommandAction> ReadKey()
{
    KeyCode key = default;
    yield return new GetKey(k => key = k);
    yield return new Value(key);
}

 

되묻고 결과 알려주기 ↓

using QFSW.QC;
using QFSW.QC.Actions;
using System.Collections.Generic;
...

[Command("choice")]
public static IEnumerator<ICommandAction> Choice()
{
    string[] consoles = {"PS4", "Xbox", "Switch"};
    string selectedConsole = default;

    yield return new Value("Pick a console");
    yield return new Choice<string>(consoles, s => selectedConsole = s);

    yield return new Typewriter($"You picked {selectedConsole}.");
}

 

 


#2 주의 점

Company Name과 Product Name은 꼭 입력이 되어있어야 나중에 로그파일 찾을 때 문제가 생기지않는다.

 

그리고 Player탭에서 스크롤 내려서 밑에 설정에서도

Fullscreen Mode가 Windowed로 되어있어야 테스트할 때 편리하다.

 

밑에 Resizeable Window 항목을 체크해줘도 좋다.

 

더 자세한 API 문서는 아래의 링크에 있다

https://qfsw.co.uk/docs/QC/api/QFSW.QC.QuantumConsole.html

 

 

COMMENT