Files
StoryGame_Unity/Assets/02_Scripts/Communication/Dialog/GraphTool
2026-08-06 09:30:08 +09:00
..
2026-08-06 09:30:08 +09:00
2026-07-24 18:20:02 +09:00
2026-07-30 10:49:41 +09:00
2026-07-24 18:20:02 +09:00

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)를 그대로 사용합니다.

사용법

  1. Project 창에서 우클릭 → Create > Communication > Dialog Graph.dlg 생성.
  2. 더블클릭해 그래프 에디터를 엽니다.
  3. 노드 추가:
    • 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).
  4. 저장(임포트)되면 .dlg 에셋이 DialogGroup이 됩니다. 이를 StoryDatabase의 비트(장소·캐릭터·조건)에 등록하면 끝 — 해당 장소에서 그 캐릭터에게 말을 걸면 조건에 따라 재생됩니다.

구성 파일 (모두 Editor 전용)

  • DialogGraph.cs — 그래프 타입/생성 메뉴/검증
  • DialogGraphNode.cs — 공통 베이스(실행 포트 헬퍼)
  • DialogStartNode.cs — 진입 노드
  • DialogLineNode.cs — 대사 + 가변 N지선다 노드
  • DialogAffectionNode.cs— 호감도 조건식만 검사해 True/False로 즉시 라우팅하는 노드
  • DialogText.cs — TalkText 멀티라인 입력용 래퍼 타입
  • DialogTextDrawer.cs — DialogText를 여러 줄 TextField로 그리는 CustomPropertyDrawer
  • DialogShortText.cs — 한 줄 텍스트 포트용 래퍼 타입 (이름 오버라이드 등)
  • DialogShortTextDrawer.cs — DialogShortText를 한 줄 TextField로 그리는 CustomPropertyDrawer
  • DialogGraphImporter.cs— .dlg → DialogGroup/DialogNode 변환

TalkText 멀티라인

  • TalkText 포트는 string이 아니라 DialogText 타입을 쓴다.
  • GraphToolkit은 [CustomPropertyDrawer]가 있는 타입을 Unity PropertyField로 렌더하므로, DialogTextDrawer가 노드의 TalkText 칸을 여러 줄(멀티라인)로 만든다.
  • 임포터는 DialogText.Value만 꺼내 DialogNode.TalkText(string)에 넣는다 — 런타임은 영향 없음.
  • 높이를 더 키우려면 DialogTextDrawerminHeight 값을 조정.

메모

  • 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로 합쳐집니다.