文档

怎么进 Unity

导出包含什么、Yarn Spinner 文件与字符串表怎么配合,以及为什么"字符串 ID 保持稳定"才是本地化真正在乎的那一点。

导出产出的是文件。没有插件要装,没有服务要你的游戏在运行时去连, 也没有任何东西会因为你停止付费而失效。

出来的是什么

Yarn Spinner 对话 —— 每棵对话树一个 .yarn 文件。任务状态机里的条件与效果 被映射到 Yarn 自己的条件与命令语法上,所以一个“需要某 flag”的节点, 到那边仍然是一个需要那个 flag 的节点。

字符串表 —— csv 与 json,每一句台词带一个稳定 ID。.yarn 文件里带着对应的 #line: 标签,Yarn Spinner 与你的本地化工具正是靠它对上“哪句是哪句”。

整个项目的 git 仓库 —— 每一次生成、每一次编辑、每一次审批都是一个提交。 clone 下来就是一个普通仓库,里面没有任何东西指回我们。

放进 Unity 工程

  1. 如果还没装,用包管理器装上 Yarn Spinner for Unity。
  2. 把导出的 .yarn 文件拷进工程——放在 Assets/ 下任意位置。
  3. 把它们加进一个 Yarn Project 资源,让它们一起编译、共用一份字符串表。
  4. 把对话运行器指向你想开始的那个节点。

导出的字符串表可以直接当本地化流程的源;如果你只发一种语言、 打算让 Yarn Spinner 自己生成,忽略它也行。

为什么稳定的字符串 ID 才是要紧的那一点

ID 只分配一次,之后一直留着。重生成一棵对话树、改一句台词、 围着它把任务重构一遍——没变的那些行,ID 还是原来那个。

这才是让本地化熬得过迭代的东西。它避开的是一个具体而且昂贵的坑: 你把字符串表发给译者,然后重生成了一棵树,ID 挪了位, 于是每一句译文都挂到了错误的原文上。而这件事, 要等到有人用一门队里没人读得懂的语言通一遍关才会被发现。

导出在发现 ID 会发生意外变化时会中止,而不是写出一张会与你已翻译的内容 悄悄错位的表。

Godot、Unreal 和别的

Yarn Spinner 除 Unity 外也有 Godot 与 Unreal 版本,导出的 .yarn 是同一批文件。 如果你用的是完全不同的东西:字符串表是纯 csv 与 json, 任务状态机与节拍表在仓库里是纯结构化数据——可读的不只是导出物,是整个项目

余额永远不挡这一步

点数用完只暂停新的生成,别的都不停。余额为零或为负时,导出照常可用, 包括那个带完整历史的 git 仓库。把自己的东西拿走,我们不设卡。