在 Unity3d Inspector 中引用可编写脚本的对象 属性

Reference Scriptable Object property in Unity3d Inspector

我正在尝试为我在 Unity3d 中构建的策略游戏构建一些内容。我目前正在使用 Scriptable Objects 来创建资产,但是在链接资产时我无法准确获得我想要的内容。

让我用一些代码给出一个适当的例子。假设我有一栋接受资源的建筑物。所以我的构建 SCO 可能看起来像:

public class buildingSCO : ScriptableObject {
    public string Name;
    public string ID;
    public string Res;
}

我的资源 SCO 看起来像:

public class resourceSCO : ScriptableObject {
    public string Name;
    public string ID;
}

因此,当我为建筑物创建资产时,我会手动输入资源的 ID(或 copy/paste)。但我担心的是,随着我创建越来越多的资产,我会开始犯错误。我想要的是能够打开一个对象 select 或只是 select 我想要其 ID 的资源资产。

我认为 Unity 不会创建您的 SCO 的副本和副本。只需按照 Unity 的预期方式引用它们,就可以了。

public class buildingSCO : ScriptableObject
{
    public string Name;
    public string ID;
    public resourceSco Res;
}

优化第一条规则:不优化。

如果您真的,真的需要使用 ID 和查找,您可以通过创建自定义检查器来实现。

[CustomEditor(typeof(buildingSCO))]
public class BuildingSCOInspector : Editor
{
    public override void OnInspectorGUI()
    {
        buildingSCO building = target as buildingSCO;

        building.Name = EditorGUILayout.TextField("Name", building.Name);
        building.ID = EditorGUILayout.TextField("ID", building.ID); // or whatever

        // this only shows currently selected resourceSCO.ID
        EditorGUILayout.LabelField("Res (current)", building.Res);

        // this allows selection of another resourceSCO
        resourceSCO resource = EditorGUILayout.ObjectField("Res", null, typeof(resourceSCO), false) as resourceSCO;
        if (resource != null)
        {
            building.Res = resource.ID;
        }
    }
}