5

我在检查器中分配 ScriptableObjects 时遇到问题。

例如,我有这个类:

using UnityEngine;

public class Buff : ScriptableObject {
    public string buffName;
}

在其中一个单一行为派生类中,我有一个这样的成员:

public Buff testBuff;

在检查器中,我看到以下内容,但我无法将脚本“Buff”拖放到该成员在此处输入图像描述
它可以将 Buff 作为新脚本拖放,但我无法将其添加到“测试 Buff”。

我尝试的不是拖放而是简单地创建一个 Buff 的实例,如下所示:

public Buff testBuff = new Buff();

这有效: 在此处输入图像描述但是我相信拖放也应该有效,加上上面给出的警告:

Buff must be instantiated using the ScriptableObject.CreateInstance method instead of new Buff.
UnityEngine.ScriptableObject:.ctor()
Buff:.ctor()
...

我正在使用最新版本的 Unity“5.0.2f1 Personal”。

4

3 回答 3

0

使用 EditorGUILayout.ObjectField 在自定义检查器中创建具有特定文件扩展名的资产;默认资产;打开/保存对话框 详细视频怎么做

于 2018-07-31T07:41:17.547 回答
0

那是因为你没有在 Buff:ScriptableObject 类中添加[System.Serializable],所以你所有的“buff”都不是可序列化的,Unity Editor 无法直接读取 c#,它只能读取已序列化的 c#。

于 2022-01-07T08:51:21.017 回答
0

您需要创建一个使用 Scriptable Object 作为类型的资产文件。这只能通过编辑器脚本来完成。wiki上有一个通用的。

本质上,您只需为您拥有的每个 Scriptable Object 类型创建一个菜单项,使用该菜单项创建这些类型的资产,然后使用您希望它们具有的值修改资产。重要的是要记住 SCO 将用作模板,如果您在编辑器中或使用代码修改 SCO,这些更改将立即对所有引用 SCO 的游戏对象和组件生效。

于 2016-01-23T01:26:30.550 回答