2016-01-07 51 views
0

以前的工作流程有這樣的代碼:如何製作可在檢測器中編輯的類?

public class ActivityClass : MonoBehaviour 
{ 
    [System.Serializable] 
    public struct activites 
    { 
     public string name; 
     public WeaponClass weapon; 
     public bool hasOwnActivities; 
     [HideInInspector] public int numb; 
     public ConditionClass.conditions why; 
     public ActionClass.act[] what; 
     public int timeToReverse; 
     public ActionClass.act[] whatIf; 
     public animatClass.animat[] howLook; 
     public StatsClass.stats soWhat; 
     public int actMode; 
     public int employ; 
     public bool change; 
     public bool chosen; 
     public int timeOfAction; 
     public int timer; 

    } 

} 

當然,這看起來像一個非常不好的做法,但它允許在編輯器中設置這些值(也就是具有ActivityClasses列表的MonoBehavior後裔)。這段代碼如何轉換成編輯器中仍然可編輯的普通類?目前只是刪除結構行使編輯器請求引用,而不是設置值。

回答

0

我不能完全肯定,但我認爲你需要的東西是這樣的:

[System.Serializable] 
public class Activity 
{ 
    public string name; 
    public WeaponClass weapon; 
    public bool hasOwnActivities; 
    private int numb; 
    public ConditionClass.conditions why; 
    public ActionClass.act[] what; 
    public int timeToReverse; 
    public ActionClass.act[] whatIf; 
    public animatClass.animat[] howLook; 
    public StatsClass.stats soWhat; 
    public int actMode; 
    public int employ; 
    public bool change; 
    public bool chosen; 
    public int timeOfAction; 
    public int timer; 

} 

public class MyClass : MonoBehaviour 
{ 
    public Activity activity = new Activity(); 
} 

活動將參考在檢查顯示所有可序列化成員。因此,您的WeaponClass實例需要使用該屬性進行標記以在Inspector中顯示其自己的成員。

編輯:如果你需要有很多情況下,只讓它作爲一個數組,並統一將完成剩下的工作:

public Activity [] activity; 

有了這個,團結會詢問數組的大小和相應的元素的數量將顯示。每個元素都可以打開並顯示成員。

編輯2:您可以使用一個列表一樣的爲數組:

public List<Activity> activities = new List<Activity>(); 

這允許你添加/刪除的項目,仍然可以看到他們或在運行時對其進行修改。

如果您的類包含對象的引用,那麼您需要在聲明或對象ctor中添加對象創建。

[System.Serializable] 
public class TopClass{ 
    public int myVar; 
    public SubClass subRef = new SubrClass(); 
} 
[System.Serializable] 
public class SubClass{ 
    public string className; 
} 

public class MyComponent:MonoBehaviour{ 
    public List<TopClass>list = new List<TopClass>(); 

    void Start(){ 
     if(list.Count > 2){ 
      Debug.Log(list[1].subRef.className); 
     } 
    } 
    void Update(){ 
     if(Input.GetKeyDown(KeyCode.Space)){ 
      TopClass tp = new TopClass(); 
      tp.subRef.className = "NewName"; 
      list.Insert(0, tp); 
      Debug.Log(list[0].subRef.className); 
     } 
    } 
} 

開始在檢查器中添加一些值(至少2個,以便打印出來)。然後運行遊戲並查看列表大小增加以及出現的新對象。

您可以在檢查器中看到添加,也可以手動修改它們並仍然在遊戲中使用它們。

+0

如果我有一個活動列表,我應該如何創建引用? – RomaValcer

+0

看編輯 – Everts

+0

事情是,我需要一個列表,而不是一個數組。 Unity要求其長度,然後要求參考,不允許在創建者中定義它們。 – RomaValcer

相關問題