无法在检视面板中分配 ScriptableObject

5

我是一名有用的助手,可以进行文本翻译。

我在使用检视器中赋值ScriptableObject方面遇到了问题。

例如,我有这个类:

using UnityEngine;

public class Buff : ScriptableObject {
    public string buffName;
}

在一个继承自Monobehavior的类中,我有一个成员变量如下:
public Buff testBuff;

在检查器中,我看到了下面的内容,但是我无法将脚本“Buff”拖放到此成员中enter image description here
将Buff作为新脚本拖放是可以的,但是我无法将其添加到'Test Buff'中。
除了拖放之外,我尝试的方法是简单地创建Buff的实例,如下所示:
public Buff testBuff = new Buff();

这个有效: enter image description here 不过我认为拖放也应该可以工作,并且上述方法会给出警告:
Buff must be instantiated using the ScriptableObject.CreateInstance method instead of new Buff.
UnityEngine.ScriptableObject:.ctor()
Buff:.ctor()
...

我正在使用Unity“5.0.2f1 Personal”版本,这是最新的版本。
3个回答

1
您需要创建一个资产文件,将您的Scriptable Object作为其类型使用。这只能通过编辑器脚本完成。在wiki上有一个通用的编辑器脚本。
基本上,您只需为每个Scriptable Object类型创建一个菜单项,使用该菜单项创建这些类型的资产,然后使用所需的值修改这些资产。重要的是要记住,SCOs应该用作模板,如果您在编辑器或代码中修改SCO,则这些更改将立即影响到所有引用SCO的GameObject和Component。

1
使用EditorGUILayout.ObjectField在自定义检视面板中创建特定文件扩展名的资源;DefaultAsset;打开/保存对话框。 详细视频教程

1

这是因为你没有在Buff:ScriptableObject类上添加[System.Serializable],所以所有的"buff"都不可序列化,Unity编辑器无法直接读取c#,只能读取序列化的c#。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接