Gamebryo3.0SDK翻译-NiEntity
NiEntity
场景包含一系列实体,这些实体代表了游侠对象。它拥有很多属性。和实体相关的都放在NiEntity库中。
注意:Game framework中的实体拥有行为,能和world builder tool交互
一、 NiEntity接口
实体库中的接口包括实体、组件等,这些接口没有继承于NiRefObject和NiObject而自身实现了引用计数和RTTI.
NiEntityPropertyInterface:所有访问含有属性的接口基类。
NiEntityInterface:代表实体系统,包含属性以及管理组件和行为。
NiEntityComponentInterface:组件接口,组件是一组可以被更新的属性集合,实体中组件可以被动态挂载和卸载。
NiEntityErrorInterface:一些操作的错误。
NiEntityCommandInterface:命令接口
二、 实体的属性
1、 实体属性
可以通过属性名字来访问属性,定义两个同名属性是违法的。
Primitve Type:预定义的类型-字符串、浮点型。。。。
Sematic Type:表明该
Display Name:
Description:
Category:方便管理这些属性,把这些属性放到一起。
Colletions:属性可以包含多个数据元素。
Inherited Properties:母实体(Master Entity)中属性可以被子实体继承。
2、 实体组件
3、 母实体(Master Entity)
每一个实体可以选择性地包含一个母实体,该实体可以继承一些或全部母实体的属性。
三、 实体的组件
实体组件包含了一系列相关的属性集合。是些组件可以实现更新操作。当要向一个实体添加一个组件时,必须确保组件中属性已经存在于实体中。此时实体不能再包含组件中存在的属性。
标准组件
NITansformationComponent:包含了Translate、Rotate、Scale
NiSceneGraphComponent:包含一个nif文件的路径。
NiLightComponent:
NICameralComponent:
NiGeneralComponent:
NiPrefabComponent:
四、 实体的命令
实体库提供了一个修改实体的框架,它时有命令和命令管理器组成的。命令封装一些列针对场景的允许操作和禁止操作。命令通过命令管理器来执行。
标准命令
五、 实体的更新和渲染
NiScene代表了系统中的一个场景,它包含了一个实体数组和选择集合(Selected sets),提供了Update和BuildVisiableSet功能。此时会调用每一个实体和组合的Update和BuildVisiabaleSet从而完成整个场景的更新和绘制。
更新:
渲染
NiEntityRenderingContext包含三个指针:NiRenderer、NiCamera、NiCullingProcess。该函数对场景进行剔除,最终建立一个NiVisiableArray。该数组包含了所有需要绘制的NiMesh。从而应用程序可以在合适的时候绘制这些对象。
六、 实体的序列化
实体实现了灵活和可扩展的流处理和序列化工作框架。从而可以实现各种文件格式的序列化和流处理。
NiEntityStreaming基类为用户自定义文件格式提供了许多方便:
A:所有继承于NiEntityStreaming的子类都将被注册到NiFactories的流工厂里。该工厂可以被工具(Scene Designer)使用。
B:所有继承于NiEntityStreaming的子类都含有从NiScene对象中添加和删除的接口,从而实现保存和加载场景。
C:所有继承于NiEntityStreaming的子类都服用已存在的代码。
序列化处理
NiEntityStreaming子类可以很方便地处理场景。
1、 属性
第一步:获取所有属性的名字
第二步:遍历流制化所有属性,此时要注意以下几点:
l 使用IsPropertySerilializable查询该属性是否可以流制化。
l 属性中的每一个值都要被流制化。
l 一些属性对于实体或组件也许不是活动的。
l 防止属性被二次序列化,最好首先流制化组件,让后流制化实体属性。可以通过IsComponentProperty查询该属性是否已存在于组件中。从而避免二次流制化某个属性。
l 当一个包含字符串属性时,它有可能代表一个文件路径、或资源名字。当是一个路径时,要把一个绝对路径转化为一个相对路径。
2、 组件和实体
它们的序列化,只需要处理它们的属性即可。
l 模板的ID
l 实体或组件的名字
l 实体或组件的master必须被流制化
l 序列化实体的可见性属性(hidden)
3、 场景
l 场景的名字
l 所有的Selection Set
l 场景中的所有实体