以前的工作流程有这样的代码:
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 :(得分: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,以便打印出来)。然后运行游戏并查看列表大小增加和新对象显示。
您可以在检查器中看到添加内容,您也可以手动修改它们并仍然在游戏中使用它们。