에디터 툴에서 생성한 선택지 데이터를 바탕으로 출력하는 UI를 얼추 완성했습니다.
public class DialogueService : IDialogueController, IDialogueSubscriber
public interface IDialogueController
{
public void Play();
public void Complete();
public void Skip();
public void NextSequence();
public void SetState(DialogueState state);
}
public interface IDialogueSubscriber
{
public enum EventType
{
OnPlay,
OnComplete,
OnSkip,
OnNextSequence,
}
public void SubscribeEvent(EventType eventType, UnityAction action);
public void UnsubscribeEvent(EventType eventType, UnityAction action);
}
UI를 중점으로 작업하다보니 Manager 내지 Service 계층의 클래스는 상태 구독/신호 전달 등 중계기 역할만 하게 된 것 같습니다.

이번엔 다이어그램을 그렸던 것이 꽤 도움이 됐습니다.
씬 진입 -> 다이어로그 -> 스테이지 -> 다이어로그 -> 재시작/씬 나가기
이렇게 굴러갑니다.

다이어로그가 굴러가는 로직은 다음과 같습니다.
위 인터페이스에서 볼 수 있듯이 Play/NextSequence/Skip/Complete 4개의 신호로만 구성되어 있어 각 시퀸스마다 다음으로 넘어가는 신호만 적당히 받아서 넘기면 됩니다.
//대충 Awake 비슷한 지점
model.dialogueSubscriber.SubscribeEvent(IDialogueSubscriber.EventType.OnComplete, OnBeforeDialgoueComplete);
//다이어로그 끝나면 시작 UI 나오도록 구독
private void OnBeforeDialgoueComplete()
{
beginPresenter.ActivateAsync().Forget();
SubscribePauseInput();
//위에서 구독한 메소드가 호출되면
model.dialogueSubscriber.UnsubscribeEvent(IDialogueSubscriber.EventType.OnComplete, OnBeforeDialgoueComplete);
model.dialogueSubscriber.SubscribeEvent(IDialogueSubscriber.EventType.OnPlay, OnAfterDialogueBegin);
}//이 메소드의 구독을 끝내고 다음↓ 메소드를 구독
private void OnAfterDialogueBegin()
{
//또 위에서 구독한 메소드가 호출되면
model.dialogueSubscriber.UnsubscribeEvent(IDialogueSubscriber.EventType.OnPlay, OnAfterDialogueBegin);
model.dialogueSubscriber.SubscribeEvent(IDialogueSubscriber.EventType.OnComplete, OnAfterDialogueComplete);
}//다음↓ 메소드를 구독
private void OnAfterDialogueComplete()
{
model.dialogueSubscriber.UnsubscribeEvent(IDialogueSubscriber.EventType.OnComplete, OnAfterDialogueComplete);
successPresenter.ActivateAsync().Forget();
}//수동으로 순차적으로 넘어가게 구독중
다만 아쉬운 점은 현재 스테이지 시작 다이어로그, 스테이지 이후 다이어로그를 명시적으로 구분해놓지 않아
일부 구독 과정을 1회용품처럼 쓰고 있는 상황입니다.
다만 데이터 타입이 다른 것도 아니라 굳이 구분하기도 이상하긔
타이핑 효과는 tmp.maxVisibleCharacters를 조정하는 식으로 구현했는데요,
문제는 이 방식이 좌->우로 타이핑하는 연출로밖에 사용하지 못한다는 점입니다.
가운데 정렬이나 우측 정렬도 타이핑 효과를 줘야 하는데, 텍스트를 받아온 후 글자 하나하나 입력하는 방식으로 했다간 RichText 때문에 텍스트 찐빠가 크게 나겠죠.
그래서 RichText까지 고려해 텍스트를 다듬고 가공된 텍스트를 타이핑하게 하는 로직을 따로 만들어야 할 것 같습니다.
다음 목표:
RichText까지 고려한 타이핑 효과 만들기
다이어로그 좀 더 다듬기
초상화 애니메이션 효과 추가
이번엔 전체적으로 설명이 너무 빈약한게 아니냐고 물으신다면 그렇다고 답하겠습니다.
'무제_LR' 카테고리의 다른 글
| Effect Prefab 생성 - Pooling (0) | 2026.01.02 |
|---|---|
| 씬 언로드, 로딩 UI 추가 (0) | 2025.12.31 |
| 다이어로그 에디터 - csv->Localization 및 TalkingData 툴 완성 (0) | 2025.12.21 |
| 다이어로그 에디터 툴 - 선택지 툴, Dirty 체크 (0) | 2025.12.19 |
| 다이어로그 에디터 툴 - EditorWindow와 AssetDataBase로 json 생성, 불러오기, 저장, 삭제 (0) | 2025.12.17 |