글 작성자: Doublsb

자, 저번 구현으로 글씨 색깔과 크기를 자유롭게 바꿀 수 있게 되었다. 남은 작업은 무엇인가?

 

- 소리 재생하기

- 텍스트 재생 속도 변경하기

- 스킵 불가

- 상호작용을 해야 다음 텍스트로 넘어감

- 상호작용 하지 않아도 창이 닫힘

 

보아하니 크게 어렵지 않은 작업일 것 같다. 하나하나 구현하면서, 내용을 적도록 하겠다.

 


#1 소리 재생하기

 

소리 재생하기는 사실상 부가 기능인데, 대사 재생 중에 각 캐릭터의 효과음을 재생할 수 있는 의도로 기획한 기능이다.

 

Show("/emote:Sad/나는 이제 웃을 것이다./emote:Happy//sound:haha/ 하하.", character);

 

 

 

이렇게 하면 "하하"가 출력될 타이밍에 'haha'가 재생된다.

 

여담으로, 해당 스크립트 내에는 Play_ChatSE와 Play_CallSE가 따로 선언되어 있는데, 왜냐하면 동물의숲이나 언더테일과 같은 텍스트 재생 효과음을 내고 싶었기 때문이다.

 

캐릭터 스크립트에서 인스펙터에 매핑하면 사용할 수 있으며, Chat SE는 한 글자씩 나올 때마다 해당 배열에 있는 사운드 중 하나가 랜덤으로 재생된다.

 

Call SE는 특정한 때에 낼 수 있는 효과음으로, Show 내에서 /sound:이름/의 형태로 전달해야 사용할 수 있다.

 


#2 텍스트 재생 속도 변경하기

 

Show("/emote:Sad/나는 지금부터 랩을 한다. /emote:Normal//speed:0.02/\n난비트를비틀어재껴버리는서브미션챔피언", character);

뭐어... 텍스트 재생 속도를 바꾸는 커맨드이다. 어렵지 않았으므로 패스.

 

 


#3 스킵 불가

 

음.. 이건 Show에서 불러올 수 있도록 했다. 

 

덤으로 Show에 callback도 붙여서, 대화창이 Hide가 되었을 때 함수를 실행할 수 있도록 했다.

 

구데기적 방법이지만 이렇게 할 수 있다.

 


#4 상호작용을 해야 다음 텍스트로 넘어감

 

뭐... 그렇다. 설명할 것도 없겠지.

 


#5 상호작용 하지 않아도 창이 닫힘

 

Show("듣고는 있는 거냐! 내 말 아직 안 /close/ 끝났어!", character);


#6 대기

 

여기에 하나 더. 일정 시간동안 대사가 나오지 않고 대기하는 기능이다.

 

Show("/emote:Sad/흠... /wait:0.5//emote:Normal/재미있군.", character);

 

이건 별거 없이, yield new waitforseconds로 제어했다.


실제로 어렵지 않았다. 거의 다 마무리가 되어 간다.

구현해야 할 남은 내용을 정리해 보자.

 

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

이런 구데기적인 짓을 하지 않아도 되도록, 스크립트를 한꺼번에 쓸 수 있게 할 계획이다.

 

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

일단은 리팩토링이 필요하다. 그리고, Character를 쉽게 추가할 수 있도록 프리팹화 시켜두어야 한다.

 

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

페이드 인/아웃이라도 하는 게 나을까? 이건 구현 당일에 더 생각해 봐야겠다.

 

 

해당 커밋 보러가기

반응형