요번에는 저희 게임에서 사용하는 대사시스템을 소개해보려고합니다.
저희 게임에서는 대사를 스크립터블 오브젝트로 만들어진 노드들로 저장합니다.
처음에는 엑셀에 저장하는 방식을 사용했다가 이런 노드방식으로 옮겨왔는데 둘다 장단점이 있는것 같습니다.
엑셀은 값 하나 복사해서 쭉 드래그해서 쭉 붙여넣기 하거나 찾기 키를 이용해서 특정 값들을 일괄적으로 변경하거나 하는,
수정에서의 편리함이 장점이라고 생각됩니다.
또 대사를 바꿀일이 생겼을때마다 일일이 빌드할 필요없이 그냥 엑셀 파일만 바꿔주면 되는것도 편한점이고요.
다만, 저희게임에서는 대사를 타임라인과 연동해서 사용하기때문에, 어차피 대사 바꾸면 타임라인에서
잡아둔 시간값이 변경되기 때문에 다시 수정하고 빌드해야해서 빌드에서의 장점은 사라졌습니다.
또한, 선택지나 분기점을 추가하기로 했었는데 엑셀에서 이걸 보기좋게 표현하기가 힘들다고 생각했습니다.
이런 선택지 / 분기점을 표현하는데 노드가 가시성이 좋다고 생각해서 넘어오게 되었습니다.
다행히 인터넷에 유니티 노드 에디터 관련 오픈소스들이 존재해서 그걸 바탕으로 대사시스템을 만들었습니다.
처음에는 노드에디터 프레임워크(https://github.com/Seneral/Node_Editor_Framework)를 바탕으로 만들었지만
중간에 버전업을 하니까 호환이 안되기 시작해서 작업한걸 날리고 XNode(https://github.com/Siccity/xNode)를 이용해서 다시만들었습니다.
2019.3 버전 기준이니까 만약 이후 버전에서 노드에디터를 사용하실 분이라면 XNode를 쓰시는 편이 좋을거같네요.
노드 에디터 프레임워크가 이것저것 지원하는건 많지만 조금 무겁고, XNode는 딱 있을것만 있지만 조금 가볍다는 느낌이 들었습니다.
XNode를 통해만든 노드에디터의 모습입니다.

이렇게 화자별로 그래프내의 노드 색깔, 말풍선 모양, 글자 색깔들을 관리도 해주고있습니다. 색은 제가 임의로 정한거라 가시성이 좀 구리네요

그 뒤 이렇게 매니저상에서 Speaker 타입과, 말풍선을 띄울 대상 스프라이트 렌더러를 선택해줍니다.

대사 타겟을 트랜스폼이아니라 스프라이트 렌더러로 잡아준 이유는
대사 위치기준을 트랜스폼으로 잡았을때, 스프라이트 모양이 달라지면서 말풍선 위치가 이상해지기 때문입니다.
두 스프라이트의 트랜스폼상 위치는 똑같지만, 스프라이트 모양이 달라지면서 서 있을때는 정상인 말풍선이 앉아있을때는 너무 위쪽에 나타나게 됩니다.
이걸 맞춰주려면 저렇게 스프라이트 상에서 모습이 많이 바뀔때 대사마다 오프셋을 넣어서 위치를 맞춰주는 노가다를 해줘야합니다.

그걸 피하기위해 요런식으로 스프라이트 바운더리에 맞춘 오프셋을 구해서 작업해주면 따로 대사마다 오프셋을 작업해주지않아도,
얼추 스프라이트 모양에 맞춰 대사를 만들어 낼 수 있습니다.

마지막으로, 대사에서 각종 특수효과를 넣을 수 있도록 해줍니다.


이제 타임라인과 연동해주면 완성입니다.
저번에 타임라인에서 올렸던것과 좀 다른모습인데,
대사로 가서 고치고, 타임라인에서 다시 대사 데이터 적용하는 과정이 귀찮아서 타임라인 내에서 수정 및 반영이 가능하도록 만들어 두었습니다.

정작 노드에디터 넘어온 이유인 선택지, 분기 관련 부분은 구현하지 않아서 보여드릴 수가 없네요
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.