怎么进 Unity
导出包含什么、Yarn Spinner 文件与字符串表怎么配合,以及为什么"字符串 ID 保持稳定"才是本地化真正在乎的那一点。
导出产出的是文件。没有插件要装,没有服务要你的游戏在运行时去连, 也没有任何东西会因为你停止付费而失效。
出来的是什么
Yarn Spinner 对话 —— 每棵对话树一个 .yarn 文件。任务状态机里的条件与效果
被映射到 Yarn 自己的条件与命令语法上,所以一个“需要某 flag”的节点,
到那边仍然是一个需要那个 flag 的节点。
字符串表 —— csv 与 json,每一句台词带一个稳定 ID。.yarn 文件里带着对应的
#line: 标签,Yarn Spinner 与你的本地化工具正是靠它对上“哪句是哪句”。
整个项目的 git 仓库 —— 每一次生成、每一次编辑、每一次审批都是一个提交。 clone 下来就是一个普通仓库,里面没有任何东西指回我们。
放进 Unity 工程
- 如果还没装,用包管理器装上 Yarn Spinner for Unity。
- 把导出的
.yarn文件拷进工程——放在Assets/下任意位置。 - 把它们加进一个 Yarn Project 资源,让它们一起编译、共用一份字符串表。
- 把对话运行器指向你想开始的那个节点。
导出的字符串表可以直接当本地化流程的源;如果你只发一种语言、 打算让 Yarn Spinner 自己生成,忽略它也行。
为什么稳定的字符串 ID 才是要紧的那一点
ID 只分配一次,之后一直留着。重生成一棵对话树、改一句台词、 围着它把任务重构一遍——没变的那些行,ID 还是原来那个。
这才是让本地化熬得过迭代的东西。它避开的是一个具体而且昂贵的坑: 你把字符串表发给译者,然后重生成了一棵树,ID 挪了位, 于是每一句译文都挂到了错误的原文上。而这件事, 要等到有人用一门队里没人读得懂的语言通一遍关才会被发现。
导出在发现 ID 会发生意外变化时会中止,而不是写出一张会与你已翻译的内容 悄悄错位的表。
Godot、Unreal 和别的
Yarn Spinner 除 Unity 外也有 Godot 与 Unreal 版本,导出的 .yarn 是同一批文件。
如果你用的是完全不同的东西:字符串表是纯 csv 与 json,
任务状态机与节拍表在仓库里是纯结构化数据——可读的不只是导出物,是整个项目。
余额永远不挡这一步
点数用完只暂停新的生成,别的都不停。余额为零或为负时,导出照常可用, 包括那个带完整历史的 git 仓库。把自己的东西拿走,我们不设卡。