看板 GameDesign 關於我們 聯絡資訊
首先,你要弄清楚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
berice152233: 非常感謝學長的解說 12/09 16:21
berice152233: 正在用你說的方法研究如何改進,謝謝 12/09 16:21