For the complete documentation index, see llms.txt. This page is also available as Markdown.

资源所有权与写时复制

了解为什么编辑一个包自带的 Convai 配置文件会创建可编辑的项目副本,而不是修改原始资源。

每个实体模块随附的设置资源——一个 ConvaiGazeProfile、一个 ConvaiEmotionProfile、以及其余部分——都会保留在 Convai 包中,直到你修改它为止。你一旦编辑了包中随附的某个资源,Convai 就会把它复制到你的项目中,并让角色指向这份副本,而不是直接写回原文件。理解其中原因就能解释一种否则看起来像 bug 的行为:你的编辑生效了,但不是作用在你以为的那个文件上。


为什么不能直接就地编辑

SDK 内随附的配置文件或设置资源位于 Packages/com.convai.convai-sdk-for-unity/。即使 Unity 恰好允许写入,直接在那里编辑也是错误的:它是所有未来角色继承的默认值;下一次 SDK 更新会替换该文件;而且当你共享项目或在另一台机器上安装 SDK 时,这个更改不会随项目一起带走。

因此,检查器控件保持可用,而不是被警告禁用。第一次编辑会把资源复制到你的项目中,让角色指向这份副本,并在副本上应用你的更改——然后再告诉你它做了什么。在你被允许尝试之前,不会要求你先做任何事;Convai 会处理包布局所带来的记录工作。


什么算是 SDK 拥有的,什么算是你自己的

Convai 会把每个设置资源归类为四种所有权类型之一(SDK/Editor/Ownership/ConvaiAssetOwnership.cs)再决定一次编辑是否需要先复制:

所有权
含义
你看到的内容

未分配任何资源。角色使用该模块内置的默认值运行。

无——这是默认的、未配置状态。

项目拥有

一个只有这个角色读取的项目资源。

没有提示。你正在编辑的正是你以为自己在编辑的内容。

项目共享

一个项目资源,打开场景中的其他角色也会读取它。

一条信息提示,说明有多少个角色共享它,并带有一个 为此角色设为独立副本 按钮。

SDK 拥有

一个随 Convai 包一起提供的资源。

一条信息提示,说明这些设置随 SDK 一起提供,并带有一个 创建项目副本 按钮。

共享只会被提示,不会被阻止——同时编辑多个共享同一配置文件的角色,是你完全可以正当做出的选择。只有 SDK 拥有的资源才需要先复制,编辑才算真正有意义。


第一次编辑时会发生什么

在选中角色时更改一个 SDK 拥有的资源上的任意字段,Convai 会:

  1. 将资源复制到你的项目中。

  2. 让角色的组件指向该副本。

  3. 将你的编辑应用到副本上——包括在副本创建之前已经做出的任何更改,并逐个属性地转移过去。

  4. 将整个操作记录为一个撤销步骤,名称按发生的事情来命名,而不是按机制来命名——例如“创建 Nova 的专属动画设置”,而不是“检查器”。

.asset 文件本身不受 Unity 的撤销系统覆盖—— AssetDatabase 资源创建从来都不受覆盖——因此撤销编辑只会把角色的引用恢复原状,但会把复制出来的文件留在项目中,你可以自己找到并删除它。


副本会放在哪里

如果角色在你的项目中有自己的 prefab,副本就会放在该角色 prefab 的旁边:属于某个角色的设置资源放在它所属角色旁边,本身就不言自明。如果没有 prefab——例如普通场景对象,或者本身位于包中的 prefab——副本就会放在 Assets/Convai/<Module>/ 中,其中 <Module> 是该模块自己的文件夹名称,例如 Assets/Convai/Gaze/。无论哪种情况,文件名都会以角色自己的名字开头,并简化为字母、数字和下划线,因此为“Nova (Front Desk)”创建的副本,仍然可以通过搜索 Nova.

在自己的检查器中复制一个设置资源、且未选中任何角色时,没有角色可供用来命名副本。该副本会放在 Assets/Convai/<AssetTypeName>/ 中,按资源类型分组。


下一步

角色具身化对话状态

最后更新于

这有帮助吗?