此篇開始研究實際應用到項目或個人Demo中。參考國外CodeMonkey的RTS包含一些基礎API應用。
前言
游戲不必100%使用Dots完全實現。因為面向組件開發一個功能復雜度和調試都比面向對象要更難。對于某些模塊,比如UI,事件管理系統,網絡等,使用傳統對象模式來實現更有效率。只有核心邏輯需要大量單位同屏運行或者很復雜的算法模型可采用Dots進行。比如RTS同時10000個單位同時移動。Unity對于托管和非托管的System有二種類型,托管是SystemBase非托管是ISystem。
Component
根據前面的介紹,Component里只能定義值類型,不能定義引用類型。如果像下圖這么定義,到編輯器里編譯就會報錯。
可定義范圍
那問題來了,除了如下圖這種簡單的類型外。我其他的什么都沒法用了嗎?
測試使用其他的值類型數據定義
Authoring時直接報錯。所以沒有Component不能定義復雜類型的數據。
常用的UnityComponent
1.LocalTransform:對應控制位置,旋轉。
但這里沒法單獨設置某一個方向的Scale,還需要添加另一個組件。
NonUniformScale:使entity具備可以在某個軸上的縮放
Component上多了個這個組件
實際上了解圖形學這塊改的是這里的矩陣換算
2.MaterialMeshInfo對應Mesh組件對應
更換Mesh代碼示例:
需要先注冊Mesh
對應System里面替換。
更換Material和Mesh一樣,需要注冊拿id替換。
3.LinkedEntityGroup
?動態生成的entity會自動添加link,這個用來控制當整個entity銷毀時,也可以把孩子節點的Component也進行刪除避免報錯。
一些鬼畜錯誤
在一個authoring上給別的GameObject添加組件時
Reimport場景會報錯,且組件并沒有正確添加進去,并且報錯信息指向的內容讓人一頭霧水。
?