首页/ 第 13 章 · 2D 游戏开发/ 第 222 课
LESSON 222 · 2D 游戏开发

2D 对话与剧情系统

对话剧情完成。下一课做 2D 完整小游戏(跑酷)。

⏱ 约 14 分钟📊 难度:入门🗂 第 13 章 · 2D 游戏开发📍 第 222 / 300 课
课程进度
222 / 300

🎯本节学习目标

  • 搭建对话框
  • 实现对话推进
  • 实现触发对话

🚀课程导读

2D 游戏讲故事靠对话。本课实现可复用的对话系统(复用于 NPC/过场)。

对话框 UI

底部对话窗。

  1. 【UI】Canvas 底部 Panel(半透明)+ 名字 TMP + 内容 TMP + “按 E 继续”提示。
  2. 【锚点】底部居中、宽 80%(第 157 课)。
  3. 【默认隐藏】对话框初始 SetActive(false)。
  4. 【打字机】协程逐字显示(第 164 课完整实现)。
  5. 【推进】按 E/空格/鼠标点:打字中=快进整行,打完=下一行。
  6. 【结束】全部行播完关闭对话框。
  7. 【复用】做成通用 DialogueSystem(单例)。
  8. 【注意】对话时暂停玩家移动(isTalking 标记)。
  9. 【完成】对话框“会说人话”。
  10. 【结构】DialogueSystem 挂在 Canvas 或空对象。
💡
对话框 = 底部面板 + 打字机 + 按键推进。第 164 课 2D 版复用。

触发对话

NPC/剧情点触发。

  1. 【NPC 触发】NPC 对象加触发器:玩家靠近按 E:
  2. public string[] lines; public string npcName;
  3. void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) hint.SetActive(true); }
  4. void OnTriggerExit2D(Collider2D other) { hint.SetActive(false); }
  5. void Update() { if (inRange && Input.GetKeyDown(KeyCode.E)) DialogueSystem.Instance.StartDialogue(npcName, lines); }
  6. 【剧情点触发】走到某处自动对话:Trigger 里直接 StartDialogue(无需按键)。
  7. 【对话数据】用 ScriptableObject 配置(第 85 课)或文本文件。
  8. 【分支选项】(进阶)对话中出现选项(第 164 课)。
  9. 【剧情标记】对话结束后设置剧情进度(PlayerPrefs/GameManager)。
  10. 【头像】对话框加角色头像 Image(切换)。
  11. 【测试】靠近 NPC 按 E 对话、走剧情点自动对话。
  12. 【注意】对话中禁止角色移动与再次触发。
  13. 【完成】你的 2D 游戏“会讲故事”!
对话触发 = 触发器 + 按键(或自动)→ StartDialogue。配数据驱动可做任何剧情。

常见错误与排查

错误:对话中角色还能动?
原因:没锁玩家输入
解决:对话开始设 isTalking=true 禁移动,结束恢复。

动手练习

课后小任务(做出来才算真的学会)

  • 搭对话框与打字机
  • NPC 靠近按 E 触发对话
  • 剧情点自动触发对话

本节小结

对话剧情完成。下一课做 2D 完整小游戏(跑酷)。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课2D 音效与音乐整合