> For the complete documentation index, see [llms.txt](https://docs.convai.com/api-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/asset-ownership.md).

# 资产所有权与写时复制

了解为什么编辑包随附的 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——副本则会放在 `Assets/Convai/<Module>/` ，而是放在这里，其中 `<Module>` 是该模块自己的文件夹名称，例如 `Assets/Convai/Gaze/`。无论哪种情况，文件名都会以角色自身的名字开头，并被简化为字母、数字和下划线，因此为 "Nova (Front Desk)" 创建的副本仍然可以通过搜索 `Nova`.

在没有选中角色的情况下，从资源自己的检查器中复制一个设置资源时，没有角色可供用来命名该副本。该副本会放在 `Assets/Convai/<AssetTypeName>/` ，而是按资源类型分组。

{% hint style="warning" %}
被多个角色共享的项目资源绝不会自动复制——只有 SDK 拥有的资源才会。使用 **为此角色设为唯一副本** 可以让某个角色获得共享项目资源的专属副本。
{% endhint %}

***

### 下一步

{% content-ref url="/pages/491cfe5f38fba67eb46308256f5d4fa1ba67cda0" %}
[角色具身化](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/character-embodiment.md)
{% endcontent-ref %}

{% content-ref url="/pages/9aa58b1250604b0f44e22f31b27c7ffe4a02efeb" %}
[对话状态](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/dialogue-state.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/asset-ownership.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
