다이어로그에 선택지 데이터를 만드는 윈도우를 추가했습니다.
그리고 대화문/선택지마다 이전 선택지의 분기문 조건을 넣는 윈도우도 만들었습니다.
예시: 스테이지 2의 HelloTalking 시퀸스는 기본적으로 "HelloData"의 데이터를 출력한다.
그런데 만약 스테이지 1의 선택지 (L.A, R.B)를 선택한 적이 있다면 "HelloData" 대신 "HiData"를 출력하게 조건 설정
앞서 말했듯 내러티브 게임도 아니고 이 이상 복잡해봤자 그만큼 깊은 컨텐츠를 만들 수 있는 환경도 아니라 적당히 경험 쌓는 목적으로 만들었습니다.

이번 작업에서 시간이 상당히 걸렸던 이유가 개떡같은 데이터 구조 및 네이밍이었습니다.
이정도면 괜찮겠지 싶어 미리 데이터 구조를 짜지 않고 적당히 얼기설기 만들었다가 땅을 치고 후회했습니다.
위 스크린샷은 각종 겹치는 이름, 중복되는 데이터를 제거한 구조입니다.
다이어로그 하나 통째로 가지고 있는 [ DialogueData ]
한 턴짜리 지문 혹은 선택지 정보를 가지고 있는 [ DialogeSequenceBase ](및 SelectionData, TalkingDat)
([ SelectionData ], [ TalkingData ] 형변환은 외부에서)
[ DialogeSequenceBase ]의 등장 조건인 [ Condition ]
일단 저장 크기는 고려하지 않고 에디터용으로만 만들었습니다.




특이사항으로는 각 클래스마다 값 변경이 일어날 때 최상위 객체에 신호를 보내는 onDirty를 붙였습니다.
프로퍼티 혹은 메소드를 통해 값이 변경될 때마다 '여기 변경점 있음!!!!" 신호를 보내 저장이 필요한지 여부를 판단하게 합니다.
private void SaveData(RootData dataSet)
{
if (dataSet.IsDirty == false) //예시
return;
DeleteData(dataSet);
var filePath = string.Format(FileNameFormat, ParseToHeadNumber(dataSet.Index), dataSet.Name);
var newPath = Path.Combine(FolderPath, filePath);
var json = JsonUtility.ToJson(dataSet.Data);
File.WriteAllText(newPath, json);
AssetDatabase.Refresh();
dataSet.guid = AssetDatabase.AssetPathToGUID(newPath);
dataSet.ClearDirty();
}
세이브 호출은 자주 하되 실질적 변경점 여부 판단을 동반함
public void CreateNewSequence()
{
switch (sequenceType)
{
case IDialogueSequence.Type.Talking:
{
sequences.Add(new DialogueTalkingData(false, "talking", onDirty));
}
break;
case IDialogueSequence.Type.Selection:
{
sequences.Add(new DialogueSelectionData(false, "selection", onDirty));
}
break;
}
onDirty?.Invoke();
}
public void RemoveSequence(DialogueSequenceBase sequence)
{
if (sequences.Contains(sequence) == false)
return;
sequences.Remove(sequence);
onDirty?.Invoke();
}
데이터를 넣거나 삭제할 때마다 onDirty?.Invoke로 변경점 있다고 고래고래 소리치기
다음에 할거:
텍스트 테이블 만들고 Localization에 끼워넣거나 등등 연동할 방법 고민하기
TalkingData 에디터 윈도우 만들기
'무제_LR' 카테고리의 다른 글
| 다이어로그 - Talking, Selection 구현 (0) | 2025.12.29 |
|---|---|
| 다이어로그 에디터 - csv->Localization 및 TalkingData 툴 완성 (0) | 2025.12.21 |
| 다이어로그 에디터 툴 - EditorWindow와 AssetDataBase로 json 생성, 불러오기, 저장, 삭제 (0) | 2025.12.17 |
| 다이어로그 시스템 및 테이블 기획 (0) | 2025.12.16 |
| 게임 컨셉 결정, 에너지 시스템 추가 (1) | 2025.12.16 |