글 작성자: Doublsb

만들고 싶은 게 RPG는 아니지만, RPG 만들기에서 사용하는 대화 표시 방식은 어느 게임에서든 쓸모있다고 생각한다.

하지만 개인 프로젝트였기 때문에 에셋을 받아 사용하고 싶지는 않았으므로, 직접 개발해보고자 한다.

 

이 에셋이 완성되고 나면 개인 프로젝트에 적극적으로 사용할 수 있을 것이다.

 

목표는 다음과 같다.

 

1. N프레임에 한 글자씩 출력되어야 한다.

2. 글자가 출력될 때마다 소리가 나야 한다. (Ex : 키보드 소리, 사람 소리 등)

3. 문장 출력 도중 감정 표현을 위해 이미지가 변할 수 있어야 한다.

4. 글자를 빠르게 나오거나, 느리게 나오도록 만들 수 있다.

5. 도중에 화면을 클릭하는 경우 한번에 문장이 출력되어야 한다. (스킵 기능)

6. 문장 데이터를 불러올 수 있어야 한다.

7. 에셋을 사용하는 입장에서 간편해야 한다.

 

서브 목표는 다음과 같다.

1. UX를 위해 대화창이 애니메이션과 함께 등장해야 한다.

2. 글씨 색깔, 글씨 크기를 자유롭게 바꿀 수 있었으면 좋겠다. [Rich Text는 가급적 쓰지 않고]

 

 

일단 글은 처음 시작하는 것처럼 쓰고 있지만, 사실 기존에 조금 작업했던 게 있었다.

 

위에서 언급했던 목표 중 1, 2, 3은 이미 개발했었다.

1은 String을 Data에서 char 단위로 Text에 더하도록 하여 해결하였다. 코루틴 사용.

2는 코루틴이 돌 때마다 인스펙터에 할당한 sound를 랜덤으로 재생하는 것으로 해결하였다.

3은 String 내에 [ ]와 같은 꺽쇠 괄호 안에 데이터를 주면, 해당 sprite로 바꿔치는 것으로 해결하였다.

Show("이것은 대화창이다. [Sad]하지만 '언젠가는' 완성되겠지. [Happy]^O^", character);

 

이 때가 4달 전이었는데, 당시 나는 enum 예찬론자였다.

 

 

그래서 감정을 Enum으로 만들어 놓고, 해당 Enum에 따라 Character Class가 그 감정에 맞는 이미지를 보여줄 수 있도록 유니티 커스텀 에디터를 적용해 둔 상태였다. 이렇게 하고 Emotion Enum만 수정한다면, 분명 유지보수하기 쉬우리라 생각한 탓이었다.

 

물론 4개월 뒤의 나는 스크립트를 고쳐야 하는 Enum을 만들 거라면 차라리 Json 파일을 만들어서 텍스트 파일을 편집하도록 하는 게 낫지 않냐는 생각이 들었다. 굳이 코드 파일을 열어보지 않아도 되고, 커스텀 에디터 내에서 조금만 고치면 Emotion을 편집할 수도 있기 때문이다.

 

또한 Enum으로 감정을 만들어 커스텀 에디터에 연동하는 것은 완벽한 구조가 아니었다. 실제로 Enum은 숫자로 이루어져 있기 때문에, Emotion의 중간값을 지우기만 해도 다음과 같이 Cynical이 밀려 사라지는 문제가 발생했다.

 

 

이걸 유념하고 쓴다면 문제는 없으나, Asset으로 개발할 생각을 가지고 있는 나는 이 구조를 데이터 기반으로 뜯어 고치기로 했다. 그 경우 해결해야 하는 문제는 다음과 같다.

 

- Emotion의 자료구조

빠르게 Emotion을 가져오기 위해, Dictionary<string, sprite>를 적용하고자 한다. 이러면 key에 따른 sprite 불러오기 처리만 해 주면 되기 때문에, 괜찮지 않을까 생각 중이다.

 

- Emotion의 데이터 저장 형태

위의 enum 형태와 같은 string은 텍스트 파일에서 줄바꿈으로만 구분해도 문제 없을 듯 하다.

sprite는 커스텀 에디터/프리팹으로 해결하는 게 맞는 것 같다.

유니티 에디터에서 텍스트 파일로 Emotion을 불러오면, 커스텀 에디터가 해당 내용에 대응하는 sprite 선택 박스를 만든다. (현재와 비슷하게)

그리고 개발자가 인스펙터에서 sprite를 할당하면, 커스텀 에디터에서 프리팹 내에 sprite를 저장하는 방식이 될 것이다.

 

해당 커밋 보러가기

반응형