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