Unity3d Inspector中的引用Scriptable Object属性

时间:2016-01-22 20:55:40

标签: unity3d unity3d-editor

我正在尝试为我在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(或复制/粘贴)。但我担心的是,当我创建越来越多的资产时,我会开始犯错误。我想要的是能够打开一个对象选择器,只需选择我想要的资源资产。

1 个答案:

答案 0 :(得分:1)

我不认为Unity会创建SCO的副本和副本。只要按照Unity打算你的方式引用它们,你就可以了。

[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;
        }
    }
}

优化的第一条规则:不进行优化。

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

Save.prototype.clickedFileSave