Re: [程式] Unity遇到List初始化器就閃退?
首先,你要弄清楚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;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.86.16 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1575786595.A.3F9.html
※ 編輯: elcnick (111.71.86.16 臺灣), 12/08/2019 15:05:11
推
12/09 16:21,
5年前
, 1F
12/09 16:21, 1F
→
12/09 16:21,
5年前
, 2F
12/09 16:21, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章