首先,你要弄清楚Unity3d的序列化规则
MonoBehaviour能被序列化的字段(Field)为
1. 宣告为public
2. 带有标签[UnityEngine.SerializeField] 但为non public
的字段
3. 没有带标签[System.NonSerialized]
4. Property默认是无法序列化的
能被序列化的类型为
1. 基础资料类型,例如int string float 等等
2. 带有[System.SerializableAttribute]的class或者struct
并且不能有递回结构,要不然会跳出错误
3. 继承自UnityEngine.Object,受Unity控管的物件
4. T[]或者List<T> T为能序列化的类型
作为第2种结构,资料储存方式会是树状的
作为第3种结构,会有该物件专属的id,会是一笔一笔的纪录
而MonoBehaviour是Unity控管的物件,请不要自行呼叫其建构子
这是必定错误的写法
如果想更清楚明白,其实你可以直接用纯文字打开档案较小的.asset或者场景
其资料类型是yaml,这应该有助于你了解其资料结构
而会闪退的原因应该只是代码造成无穷递回的关系
Visual Studio版本应该也会一样的情况,如果是没有印出任何讯息
代表只是要比较久才会发生堆叠溢位
最后,Unity3D,其编辑器默认上可以编辑序列化结构的资料
使用编辑器字段初始化你的资料,不要在代码去增加资料
public class MegBox:MonoBehaviour
{
// 在这边,编辑器是可以直接更改资料内容的
[SerializeField]
private Data[] m_DataList;
void Start()
{
if(m_DataList!=null)
{
//Do something
}
}
}
[System.Serializable]
public class Data
{
public string P;
public int M;
}