2016-01-22 141 views
1

我正在尝试构建一些我在Unity3d中构建的策略游戏的内容。我目前使用脚本对象来创建资产,但是我有一个问题,在链接资产时,我正想要什么。Unity3d Inspector中引用脚本对象属性

让我给一个正确的例子,一些代码。可以说我有一栋可以接受资源的建筑。所以,我可能有我的建筑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手工(或复制/粘贴)。但我担心的是,随着我创造越来越多的资产,我会开始犯错误。我想要的是能够打开一个对象选择器,并选择我想要的ID的资源资产。

+0

你有没有可以编辑和缩短你的问题?例如完全消除前3个句子 – Fattie

回答

1

我不认为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; 
     } 
    } 
} 
+0

我将检查您的自定义编辑器,我认为这可能是我正在寻找的。我只是重新阅读我的问题,我可以看到你认为我关心多个副本的地方。我会尽力解决这个问题。 – Timbermar

+0

自定义编辑器正是我正在寻找的。代码存在一些问题(比如OnInspectorGUI签名需要公开覆盖),所以我将对您发布的内容进行快速编辑。这将帮助我确保不会错误地输入ID。 – Timbermar