常见问题
我需要会编程才能使用 Naninovel 吗?
Naninovel 的设计目标是让非程序员也能轻松上手,不需要任何编程知识就能制作基础的视觉小说。例如,我们的 WebGL 演示 就完全没有使用任何自定义 C# 脚本。请参阅 入门指南 和 视频教程 了解基本工作流程。
不过,如果要添加自定义功能(例如特殊玩法)或整合第三方插件,则通常需要编写 C# 脚本(或使用 可视化脚本)。部分功能(例如 UI 自定义)也可能需要具备一定的 Unity 编辑器经验。
我可以将 Naninovel 用作已有游戏的对话系统吗?
可以。虽然 Naninovel 主要面向传统视觉小说,并且最适合作为这类游戏的模板,但它同样可以整合到其他类型的项目中。无论你正在制作 3D 冒险游戏、RPG,还是其他类型的游戏,都可以将 Naninovel 当作即插即用的对话系统。
请注意,这类整合通常需要一定程度的 C#(或 可视化脚本)开发。建议先阅读 引擎架构概览 了解 Naninovel 的运行机制,并查阅 整合指南 获取详细的整合方式。
为什么不使用节点图来编写脚本?
乍一看,节点图似乎很适合编写对话,但当内容量增加时,它会迅速变得杂乱且难以维护。复杂的对话逻辑在纯文本格式中反而更易管理、扩展性更好、效率更高。
可以查看 示例对比图:左侧是某个常见的节点式对话编辑器,右侧是同样内容的 Naninovel 脚本。可以看到,文本形式更加直观、易于维护,没有复杂的界面操作,也不必在 Unity 资源中四处查找。
当然,如果只是为了观察剧情分支的整体结构,节点图仍然有其价值。因此,Naninovel 也提供了 演出脚本图,可用于查看与整理故事流程。
能在 Naninovel 中嵌入小游戏吗?
可以。你可以在 Naninovel 的默认流程中“注入”自定义逻辑。不过,这通常需要通过引擎的 C# API 实现(可以直接编写脚本,也可以使用 可视化脚本 方案)。
请参考 引擎服务指南,了解可以调用的开放 API。你还可以利用 状态托管机制、自定义演出元素实现 以及 自定义指令 来实现更复杂的功能。
它支持特定语言吗?
Naninovel 可以显示任何语言的文本,但部分语言需要使用兼容的字体。请参阅 本地化指南的字体部分 获取相关信息。
购买 Naninovel 后能获得源码吗?
可以。所有 Unity 相关源码都包含在发行包中。通用的 Naninovel 模块以动态程序集的形式分发,其源码托管在 私有 GitHub 仓库,你可以在 注册许可证 后获取访问权限。
使用条款和授权协议是什么?
Naninovel 的使用受以下《最终用户许可协议》(EULA)约束:👉 naninovel.com/eula 请在下载或使用之前仔细阅读该文档。
为什么注册 Asset Store 许可证时提示 “asset wasn’t downloaded”?
当你通过 Unity Asset Store 购买 Naninovel 时,注册过程会验证下载记录。因此,你必须先使用购买该资产的账户通过 Unity 的 Package Manager 至少下载一次 Naninovel。
如果是多个副本(例如团队许可证),每个副本都需要由对应组织用户下载。若确认已完成步骤但仍出现问题,请 联系 Unity 客服。
WARNING
如果资产是以组织账号购买的,必须由组织所有者本人 下载才能通过验证(被分配的成员账户不计入)。
这是 Unity Asset Store 的限制,我们无法提供绕过方法;如有问题,请联系 Unity 支持团队。
为什么安装包里没有 Demo 场景?
Naninovel 设计为 场景无关,不会使用任何 Unity 场景。因此,无法提供传统意义上的示例或 Demo 场景。
引擎会在游戏启动时自动初始化(可在配置中改为手动初始化),并通过称为 Nani脚本 的文本文件来编写剧情。
建议先阅读 入门指南,了解如何使用引擎。更多使用示例可在 功能指南 和 指令 API 参考 中找到。如果你需要一个完整的示例项目,可以查看 Demo 项目。
如何自定义标题(主)菜单,例如添加背景、音乐、特效、修改按钮等?
UI 部分(如修改按钮、布局或样式)请参考 修改内置 Title UI 预制体。其他内容可在脚本配置菜单中设置 Title Script(路径:Naninovel -> Configuration -> Scripts),并使用脚本指令来布置场景,就像编写普通剧本一样。
该标题脚本会在进入主菜单时自动播放。完整示例可参考视频教程:🎬 youtu.be/hqhfhXzQkdk
为什么背景图被裁切了?
请确保背景贴图的宽高比与相机配置中设置的参考分辨率一致。同时检查贴图导入设置(例如 Max Size 是否足够大)。
当屏幕宽高比与参考分辨率不一致时,背景演出元素会尝试自动匹配,可能因此导致裁切。详情可参阅 匹配模式说明。
如何在文本中间插入指令?
请使用 指令内联 功能。
如何防止指令并行执行?
在所有异步指令中,都可以使用 wait 参数来实现此目的,例如:
; 在角色被隐藏之后,文本输出窗才会开始淡出。
@hideChars wait!
@hidePrinter或者,可以在脚本播放器配置中启用 Wait By Default 选项;这样所有指令都会默认等待执行完毕,除非显式地将 wait 取反(设为 false)。
INFO
有关异步(并行)指令执行的更多信息,请参阅专门章节。
如何让角色(Actor)在彼此前后显示(Z 轴排序)?
可以通过调整 Z 轴位置来实现,例如:
; 让 Sora 出现在底部中央位置,并位于 Felix 前方。
@char Sora pos:50,0,-1
@char Felix pos:,,0如果在透视相机模式下遇到排序问题,请尝试将编辑器菜单中 “Edit > Project Settings > Graphics” 下的 Transparency Sort Mode 设置为 Orthographic。有关 Unity 中对象排序方式的更多信息,请参阅 2D 排序手册。
是否可以只在文本输出窗中显示角色头像,而隐藏角色本体?
可以。为想要隐藏的角色指定 !visible 参数即可,此时头像仍会保持可见,例如:
@char CharId !visible如果你在隐藏角色本体的同时需要频繁切换头像,建议在角色配置菜单中禁用 Auto Show On Modify 选项;禁用后,即使角色处于隐藏状态,也可以直接修改其参数,而无需每次都指定 !visible。
另外,也可以参考 角色渲染到纹理 功能。
如何在 Naninovel 脚本中执行自定义 C# 代码?
若要调用 C# 行为(例如访问场景中的游戏对象),请使用 自定义指令;
若要从 C# 方法中获取返回值并在 Naninovel 脚本中使用,请参考 表达式函数扩展。