- ComponentSystem的代碼結構圖如下
- ComponentSystem的總體方法
和Unity3D中的ComponentSystem類似,該系統將可以添加多個類實現到一個對象中。使得程序的邏輯可以分塊在不同的地方。
其具體行爲類似於插件系統,但比插件方便很多。因爲節點對象,可以綁定多個 Component類實現,同時,又可以在源代碼級別進行分解。使用非常方便。
截至Unigine V2.7.1源代碼版本中,該系統還處於獨立狀態,但預計新版本系統中,將會整合進SDK中
以下是具體步驟,如何使用ComponentSystem:
- 目前該系統還沒有在SDK中默認包含,需要在Sample目錄下找到。位置是
SDK 目錄下的\source\samples\Api\Logics\ComponentSystem
將ComponentSystem目錄完整複製到你要用到的項目中,並且包含。【最好保證目錄結構層次】
- 寫一個繼承自ComponentBase的類,用作外部實現具體邏輯的類,這個類後續會添加綁定到某個節點對象上。
這個類的具體實現中,有三大塊比較重要
- 其中第一個是所有屬性對象實質上存儲到了data目錄下的一個名叫該屬性名的.prop屬性文件中。
- 第二部分是寫了暴露在編輯器中的屬性內容
- 第三部分是介入到World場景中幾個重要循環函數的重載。組件的具體實現其實也就是在其中。
- 在代碼中使用剛纔創建的組件類,如下圖
- RegisterComponent函數將我們剛纔創建的組件類TestA添加到組件系統中
其內部實現,應該是一個map list,維持着一堆
- 中間這部分是獲取默認場景中的材質球對象(僅測試用)
- 將剛纔創建的組件類testA,添加到節點對象myTestNode中.然後你就可以在具體的update函數中做各種行爲,目前我們就操作材質球移動。
整體代碼如下圖:
完整的項目代碼在附件中。