- 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函数中做各种行为,目前我们就操作材质球移动。
整体代码如下图:
完整的项目代码在附件中。