我刚刚接触序列化,并且有一个疑问为什么要使用公共数组 自定义类的名称不会显示在检查器上。
假设我有如下代码
using UnityEngine;
using System.Collections;
public class A:MonoBehaviour{
public B b;
public C[] c= new C[3];
public D d;
public E[] e;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
[System.Serializable]
public class D
{
}
// Same goes for this you can remove monobehaviour
[System.Serializable]
public class E
{
}
我发现变量'b'统一存在于检查器中,但我找不到'c'在哪里。
https://docs.unity3d.com/ScriptReference/SerializeField.html
据我所知,我不需要同时执行a和b的[Serializefield]或[Serializable]公共变量来显示检查器(因为这两个都是公共的,必须自动显示在inspector(?)上)。
有人可以向我解释为什么“ c”没有出现在检查器上吗?还是我错过了什么?任何解释将不胜感激。
这是B级和C级。相同的代码只是名称不同。
using UnityEngine;
using System.Collections;
public class B: MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
using UnityEngine;
using System.Collections;
public class C: MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
我尝试了D,C建议以下答案。两者都不会显示在检查器上。
答案 0 :(得分:0)
Serialization在您当前的情况下是关于使对象对单位检查员“可读”。
当您应用Serializable
属性时,表示您正在说这种类型的对象可以被单位检查员“读取”。
应用Serializefield
属性时,表示您正在使检查人员可以读取当前对象。
(提供了可以序列化的功能,并且它尚未首先进行序列化)
回到您的问题,您应该在案例中为C
标记上一个Serializable
属性。
(尽管大多数时候我发现我不需要)>
像这样:
[System.Serializable]
public class C {}
答案 1 :(得分:0)
从A
派生您的类MonoBehaviour
并将其附加到检查器中的GameObject。
答案 2 :(得分:0)
// Attach this to gameobject and your classes will show up on inspector
public class A : MonoBehaviour
{
// both B and C is class
public B b;
public C[] c;
}
//This doesn't need to be monobehaviour as this should be the data class and A should be the container
[System.Serializable]
public class C {
public int number;
}
// Same goes for this you can remove monobehaviour
[System.Serializable]
public class B {
[SerializeField]
private int ID;
public string name;
}