Dialog Graph Tool
Communication/Dialog 시스템(DialogGroup / DialogNode / DialogChoice)을
노드 그래프로 저작하기 위한 에디터 전용 도구입니다.
Unity GraphToolkit(Unity.GraphToolkit.Editor) 기반 — Unity 6000.4부터 에디터 내장 모듈입니다.
동작 개요
.dlg그래프 에셋을 노드로 편집 → 저장하면DialogGraphImporter가 기존 런타임 타입(DialogGroup+ 여러DialogNode)으로 자동 변환합니다.- 변환 결과: 메인 에셋 =
DialogGroup, 서브에셋 = 각DialogNode. DialogPlayer는 수정 없이 임포트된.dlg(=DialogGroup)를 그대로 사용합니다.
사용법
- Project 창에서 우클릭 →
Create > Communication > Dialog Graph로.dlg생성. - 더블클릭해 그래프 에디터를 엽니다.
- 노드 추가:
- Dialog Start Node : 진입점. 출력 화살표를 첫 대사 노드에 연결. (그래프당 1개)
- Dialog Line Node : 대사 1줄. Speaker/TalkText/Gesture/Expression/Voice/BGM 입력.
진행은 항상 플레이어 입력으로 넘어갑니다.
Choice Count = 0→ 선형.Out출력을 다음 노드로 연결(=DialogNode.Next).Choice Count = N→ 가변 N지선다.Choice Question+ 선택지마다Choice i Text(텍스트) 와Choice i →(분기 출력) 생성. 각 분기 출력을 목적지 노드에 연결(=DialogNode.Choices[i].DestinationNode).
- 저장(임포트)되면
.dlg에셋이DialogGroup이 됩니다. 이를StoryDatabase의 비트(장소·캐릭터·조건)에 등록하면 끝 — 해당 장소에서 그 캐릭터에게 말을 걸면 조건에 따라 재생됩니다.
구성 파일 (모두 Editor 전용)
DialogGraph.cs— 그래프 타입/생성 메뉴/검증DialogGraphNode.cs— 공통 베이스(실행 포트 헬퍼)DialogStartNode.cs— 진입 노드DialogLineNode.cs— 대사 + 가변 N지선다 노드DialogAffectionNode.cs— 호감도 조건식만 검사해 True/False로 즉시 라우팅하는 노드DialogText.cs— TalkText 멀티라인 입력용 래퍼 타입DialogTextDrawer.cs— DialogText를 여러 줄 TextField로 그리는 CustomPropertyDrawerDialogShortText.cs— 한 줄 텍스트 포트용 래퍼 타입 (이름 오버라이드 등)DialogShortTextDrawer.cs— DialogShortText를 한 줄 TextField로 그리는 CustomPropertyDrawerDialogGraphImporter.cs— .dlg → DialogGroup/DialogNode 변환
TalkText 멀티라인
- TalkText 포트는
string이 아니라DialogText타입을 쓴다. - GraphToolkit은
[CustomPropertyDrawer]가 있는 타입을 Unity PropertyField로 렌더하므로,DialogTextDrawer가 노드의 TalkText 칸을 여러 줄(멀티라인)로 만든다. - 임포터는
DialogText.Value만 꺼내DialogNode.TalkText(string)에 넣는다 — 런타임은 영향 없음. - 높이를 더 키우려면
DialogTextDrawer의minHeight값을 조정.
메모
- GraphToolkit API는 여전히 experimental이라 바뀔 수 있습니다. 단, 버전을 결정하는 것은
Packages/manifest.json의 핀이 아니라 에디터 버전입니다 — Unity 6000.4부터 GraphToolkit이 에디터 내장 모듈(UnityEditor.GraphToolkitModule)이 되었고,com.unity.graphtoolkit패키지는 코드가 없는 shim("type": "shim")일 뿐입니다. 즉 manifest가 그대로여도 에디터를 올리면 API가 바뀔 수 있으므로, 에디터 업그레이드 후엔 이 폴더가 컴파일되는지와Assets/07_Data/DialogGraph/*.dlg가 정상 임포트되는지를 확인할 것. (패키지 버전을 내려도 API는 고정되지 않습니다 — shim엔 코드가 없음) - 분기 출력이 비어 있으면 해당 선택지의
DestinationNode는 null이 되어 대화가 종료됩니다. - 여러 경로에서 같은 노드로 연결하면(루프 포함) 하나의
DialogNode로 합쳐집니다.