指南

Unity 文字转语音:游戏台词与运行时语音

Unity 游戏早在找到配音演员之前就需要有声台词:用于原型、临时对白、教程,以及那些永远不会去录音棚的小团队。文字转语音能在台词写好的当天就配上声音,剧本改了也能在几秒内重新生成。请注意:Supertonic 3 暂不支持中文,可朗读英语、日语、韩语等 31 种语言。

免费的 SuperClonica 引擎在普通处理器上离线朗读文本。本指南介绍在 Unity 中使用它的两种方式(预先生成的片段和从 C# 发起的运行时语音),以及哪些声音可以用于正式发布。

为 Unity 游戏配音的两种方式

玩家的电脑不会运行语音服务器,所以正式发布的单机游戏应该随附片段。

  • 预先生成的片段:在开发阶段为每句台词生成语音,把 WAV 文件作为普通 AudioClip 随游戏发布。玩家电脑上不需要额外运行任何东西。
  • 运行时语音:游戏把文本发送到 SuperClonica 服务器并播放返回的音频。适合编辑器工具、原型以及有自己服务器的在线游戏。
  • 两种方式都在普通处理器上运行,不按字符收费。
  • 模型支持 31 种语言,暂不支持中文。

免费挑选声音

在任意声音页面输入一句 NPC 台词,30 到 100 个字符,选择语言并点击生成按钮。几秒后就能听出声音是否适合角色,无需注册。

提前生成对白

相同的文本、声音和 seed 总会得到相同的音频,所以只需重新生成改动过的台词,仓库里保存脚本而不是音频。

  • 安装引擎:python -m pip install superclonica-cpu。
  • 把台词放在一张表里:ID、语言和文本。
  • 用一个短脚本逐行处理:superclonica --text "Welcome to the village!" --voice npc.json --lang en --output Assets/Audio/Lines/npc_greeting_01.wav。
  • Unity 会自动导入 Assets 下的新 WAV 文件;短台词用 Decompress On Load,长旁白用 Streaming。

从 C# 在运行时朗读

在任意处理器上启动服务器:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。然后用内置的 UnityWebRequest 调用,无需额外的包:[Serializable] class Line { public string text; public string voice; public string lang; }。在协程中:var req = new UnityWebRequest("http://localhost:8000/synthesize", "POST"); req.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(JsonUtility.ToJson(new Line { text = "Welcome back!", voice = "F1", lang = "en" }))); req.downloadHandler = new DownloadHandlerAudioClip(req.url, AudioType.WAV); req.SetRequestHeader("Content-Type", "application/json"); yield return req.SendWebRequest(); source.PlayOneShot(DownloadHandlerAudioClip.GetContent(req)); 在处理器上,短句大约需要半秒;重复出现的台词请缓存片段。不要把 API 密钥放进游戏构建中,玩家可以把它提取出来;应由你自己的游戏服务器去调用语音服务器。

可以用于发布的声音

原型阶段可以使用目录中的任何声音。正式发布的游戏请使用你拥有权利的声音:模型自带的十个标准声音 M1–M5、F1–F5,用征得同意的演员 5 到 10 秒的干净录音、在配有 NVIDIA 显卡的电脑上用 SuperClonica 工作室训练出的你自己的声音,或在交易所定制的声音。粉丝制作的角色声音适用于恶搞和同人游戏,而不适用于商业游戏。