
GoNorth导出引擎深度解析Scriban模板、占位符与Export Snippets原理揭秘【免费下载链接】GoNorthGoNorth is a story and content planning tool for RPGs and other open world games.项目地址: https://gitcode.com/gh_mirrors/go/GoNorthGoNorth是一款面向 RPG 与开放世界游戏的故事与内容规划工具而它最硬核的亮点之一就是内置的导出引擎你可以在 GoNorth 里设计 NPC、道具、对话、任务与状态机再通过Scriban 模板、占位符和 Export Snippets把规划好的内容一键转换为可直接使用的游戏脚本如 Lua。本文带你从零看懂这套导出引擎的工作原理 一图看懂导出引擎解决什么问题在传统的游戏开发流程中策划写策划案、程序写脚本两者之间靠人肉翻译。GoNorth 的导出引擎把这一环节自动化了输入你在界面上配置的对象数据NPC 属性、背包、技能、对话、日常行为等模板你或默认提供的Scriban 导出模板定义输出长什么样⚙️引擎占位符解析 数据收集器 函数渲染器输出结构完整、可运行的游戏脚本入口非常简洁整个导出行为都围绕 IObjectExporter 接口展开一次导出只需要两个参数模板ExportTemplate和对象数据ExportObjectData。️ 模板数据模型一切导出的起点每个导出模板对应一条数据库记录核心定义在 ExportTemplate.cs 中。理解这 4 个字段就理解了导出引擎的骨架字段作用TemplateType模板类型对象、对象 Snippet、Include、每日行为等决定哪些数据可用Code模板正文即 Scriban 模板代码RenderingEngine渲染引擎Legacy或ScribanExportSnippets模板上挂载的 Export Snippets 列表其中RenderingEngine是一个枚举定义在 ExportTemplateRenderingEngine.cs 中Legacy旧引擎基于占位符解析器的老式方案占位符由一组PlaceholderResolver逐个替换逻辑写死在 C# 代码里Scriban新引擎基于 Scriban 模板引擎的现代方案模板本身具备完整的条件、循环和函数能力灵活性大幅提升 旧模板默认使用 Legacy 引擎以保证向后兼容新模板建议直接使用 Scriban。 Scriban 渲染引擎内部占位符是如何被填上的核心实现位于 ScribanExportTemplatePlaceholderRenderingEngine.cs。一次导出的流程可以概括为 4 步解析模板Template.Parse把模板代码解析为 Scriban 模板并在保存时提前校验语法构建脚本对象遍历一组值收集器Value Collector把数据库中的对象数据注入到模板可用的数据上下文中渲染调用RenderAsync把模板 数据渲染为最终脚本文本错误收集所有异常统一汇入错误集合界面上可看到清晰的错误提示值收集器模板里每个变量从哪来引擎内置了十几个IScribanExportValueCollector实现目录Services/Export/Placeholder/ScribanRenderingEngine/ValueCollector/每个收集器负责一类数据NpcExportValueCollector→ 模板里的npc名称、属性、状态机ItemExportValueCollector→item道具数据InventoryValueCollector/ItemInventoryValueCollector→ 背包列表DialogValueCollector→dialog对话图与全部对话函数NpcStateMachineExportValueCollector→state_machine状态与迁移NpcDailyRoutineExportValueCollector→daily_routine日常行为ExportSnippetValueCollector→snippet/snippet_functionExport SnippetsLanguageKeyValueCollector→langkey多语言键值也就是说模板里的变量不是魔法而是这些收集器提前收集好并注册进 Scriban 的ScriptObject。管道函数把复杂数据一行变多行除了变量Scriban 模板还能使用内置的管道渲染函数实现位于Services/Export/Placeholder/ScribanRenderingEngine/RenderingFunctions/。以默认的 NPC 模板 ObjectNpc.lua 为例节选-- Inventory {{ inventory | inventory_list }} -- Skills {{ skills | skill_list }}| inventory_list会把背包数据渲染成多行、带缩进的游戏代码类似的函数还有attribute_list属性列表、skill_list、daily_routine_event_list、dialog_function、state_machine_function、indent_multiline多行缩进等。条件与循环Scriban 让模板会思考Scriban 引擎让模板拥有了真正的逻辑能力默认模板中随处可见{{~ if !inventory.empty? ~}} {{ inventory | inventory_list }} {{~ end ~}} {{~ if dialog ~}} {{~ for curFunction in dialog.all_functions ~}} {{ curFunction | dialog_function }} {{~ end ~}} {{~ end ~}}翻译过来就是如果这个 NPC 有背包就导出背包如果配置了对话就遍历导出所有对话函数。这种按需输出的能力Legacy 引擎是做不到的 默认模板库与 include 机制GoNorth 自带一套开箱即用的默认模板全部放在DefaultExportTemplates/目录下按用途组织Object/NPC、道具、技能、背包、状态函数等对象模板ObjectNpc.luaTale/对话系统的动作与条件模板TaleAction*.lua、TaleCondition*.lua近百个General/通用的条件比较与逻辑运算模板等于、包含、与/或/非……Language/语言文件ini导出模板配合include 机制模板可以像积木一样复用Scriban 模板中一行include Npc就能引入另一个模板的内容底层由 ScribanIncludeTemplateLoader.cs 负责从数据库加载。默认模板的加载则交给 CachedExportDefaultTemplateProvider.cs 做缓存管理。 Export Snippets 原理揭秘给对象挂上自定义脚本Export Snippets是 GoNorth 导出体系中最灵活的设计你可以给任意对象挂上一个独立的小脚本片段导出时它会自动生成一个带函数名的代码块嵌入到对象脚本中。两种 Snippet 写法一条渲染管线渲染逻辑集中在 ExportSnippetFunctionRenderer.cs它支持两种ScriptType类型说明Code代码型直接填写脚本文本原样包装成函数导出NodeGraph节点图型用可视化节点编排逻辑引擎调用INodeGraphParser解析节点图复用对话系统的步骤渲染器把节点翻译成脚本函数无论哪种写法最终都会产出一个ExportSnippetFunction函数名 函数体再交给默认模板 ObjectExportSnippetFunction.lua 输出function {{ snippet_function.function_name }}(this) {{ snippet_function.code | indent_multiline }} endSnippet 与对象互相感知Services/Export/ExportSnippets/目录下还有一组配套服务ExportSnippetFunctionNameGenerator.cs自动为 Snippet 生成不冲突的函数名ExportSnippetRelatedObjectNameResolver.cs解析 Snippet 引用的关联对象比如某段逻辑针对的 NPC 或道具ExportSnippetRelatedObjectUpdater.cs对象被导出时让相关 Snippet 自动同步 多语言导出langkey 占位符游戏文本需要多语言支持GoNorth 的方案是语言键Language Key模板中写{{ langkey npc.name }}而不是直接输出角色名字文本ScribanLanguageKeyGenerator.cs 负责为每个待导出文本生成唯一的语言键导出的 ini 语言文件由Language/LanguageFile.ini模板渲染LanguageKey数据模型定义在 LanguageKey.cs这样脚本里引用的是稳定的键值具体文案集中在语言文件中维护——本地化流程一目了然 快速上手三步写出你的第一个 Scriban 导出模板新建模板在导出模板管理页创建模板渲染引擎选择Scriban写模板代码从占位符面板查看当前模板类型可用的变量如npc、inventory、dialog与函数善用{{~ if ~}}、{{~ for ~}}控制输出选对象导出在对象详情页选择你的模板执行导出界面对照预览生成的脚本语法错误会在保存时由ValidateTemplate提前拦截 小贴士不确定语法直接把DefaultExportTemplates/Object/下的默认模板抄一份来改是最快的学习路径。✅ 总结组件一句话定位ExportTemplate导出行为的配置中心类型、代码、引擎、SnippetsScriban 引擎变量注入 条件循环 管道函数模板即逻辑值收集器把数据库对象翻译成模板变量Export Snippets对象级自定义脚本支持代码与节点图两种写法langkey文本与脚本解耦支撑多语言导出GoNorth 的导出引擎用模板 数据 渲染函数三层设计把策划内容与游戏脚本之间的手工鸿沟彻底填平。理解了占位符、Scriban 模板与 Export Snippets 这三块拼图你就掌握了它的核心 【免费下载链接】GoNorthGoNorth is a story and content planning tool for RPGs and other open world games.项目地址: https://gitcode.com/gh_mirrors/go/GoNorth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考