如何制作可在督察员中编辑的课程?

时间:2016-01-07 14:55:51

标签: unity3d

以前的工作流程有这样的代码:

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后代)。如何将此代码转换为仍可在编辑器中编辑的普通类?目前只删除结构线使编辑器请求引用,而不是设置值。

1 个答案:

答案 0 :(得分: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();
}

活动参考将在Inspector中显示所有可序列化成员。因此,您的WeaponClass需要使用该属性进行标记,以在Inspector中显示自己的成员。

编辑:如果你需要有很多实例,只需将它作为一个数组,Unity将负责其余的事情:

public Activity [] activity;

有了这个,Unity会询问数组的大小,并显示相应的元素数量。每个元素都可以打开并显示成员。

编辑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,以便打印出来)。然后运行游戏并查看列表大小增加和新对象显示。

您可以在检查器中看到添加内容,您也可以手动修改它们并仍然在游戏中使用它们。