将Cars(汽车)导入City Traffic(城市交通)系统
本教程旨在帮助您将您自己的汽车导入City Traffic(城市交通)系统。
要求
- 这里假设您已经有了一个汽车的3D模型,以及准备要导出的车轮。
- 这里假设已经安装了City Traffic(城市交通)系统。
导出选项
这部分包含了在您将自己的模型从3D设计软件中导出时应该遵守的一些重要准则。 汽车的网格和车轮要分别导出。
要想将您的mesh导入到City Traffic系统,须借助指定参数先对其导出:
- 您的汽车应具有检测盒表面。 该表面被用来通过相交射线检测该汽车。
- 汽车的朝向应为+Y。 这意味着汽车的前方应有正的Y方向。
【不】推荐在Unigine Editor内更改mesh的朝向。 您需要在3D设计软件中设置mesh,之后将其导出!
在导出车轮时您应考虑如下情况:
- 您需要导出直立的车轮。
- 您应该从3D设计软件导出2个车轮(左和右),或者为左右两边只导出1个具有不同表面的车轮;这样做的原因是,在Unigine Editor中是严格禁止旋转车轮的。
添加实体(Entity)
这部分介绍了如何将由3D设计软件导出的汽车添加给City Traffic系统。
由于City Traffic(城市交通)系统是在Game Framework(游戏框架)的基础上建立的,因此每一种车辆都是一个分配有节点引用的实体(entity)。 车辆的基类被命名为"Car"。 并且每辆car的变种都应保存为单独的.node文件。
要想创建新实体,须执行如下操作:
-
从SDK Browser中启动Driving editor。
- 通过点击Plugins(插件) -> Game Framework(游戏框架)打开Game Framework插件窗口。
-
在打开的窗口中选择Car实体,然后点击New Entity(新建实体)按钮来创建从Car基类继承来的新的car实体。
- 点击Create(创建)按钮为您的car创建实体。
-
选择创建的实体并点击Edit logic(编辑逻辑)按钮。
-
在打开的文件中添加如下代码:
void onInit() { // 在此放置您的init代码 } void onShutdown() { // 在此放置您的shutdown代码 } void onUpdate() { // 在此放置您的update代码 } void onRender() { // 在此放置您的render代码 } void onFlush() { // 在此放置您的flush代码 }
导入Car
待创建完实体之后,您就需要将该car添加给City Traffic系统。 要想导入car,须执行如下操作:
- 将car作为ObjectMeshStatic节点添加给City Traffic系统。
- 打开Nodes(节点)面板,选择您刚刚添加的car的节点。 切换至它的Surfaces(表面)标签页。
- 选择检测盒的表面更改如下参数:
- 除了Intersection(相交)和Enabled(启用),取消选中所有的复选框。 应只有Intersection(相交)和Enabled(启用)复选框是启用的。
- 将Intersection(相交)掩码更改为00000100。
- 将Viewport(视窗)掩码更改为00000002。
- 设置box_detection材质。
- 将其它表面都取消选中Intersection(相交)和Collision(碰撞)复选框。
- 为节点添加Rigid型body,并在Shape-based mass parameters(基于形状的质量参数)复选框未勾选的情况下将其勾选。
-
为节点添加Box形状,并指定该形状的大小和位置。 您之所以应该指定形状的边界靠近汽车车体的mesh的边界,是因为虚拟世界的物理(Physics)会对添加的形状有影响。
正确的形状大小及其位置不正确的形状大小及其位置
- 更改如下Shape(形状)参数:
- 将Mass(质量)参数更改为4。
- 将Friction(摩擦力)参数更改为1。
- 将Restitution(复原)参数更改为0。
【不】更改Shape(形状)位置的X值! - 取消选中Body(实体)标签页内的Shape-based mass parameters(基于形状的质量参数)复选框。
导入车轮(Wheels)
待添加完car之后,您就应该将车轮添加给它:
- 将车轮作为ObjectMeshStatic节点添加给City Traffic系统。
- 确保车轮成为car的子节点。
- 将车轮设置给car。 车轮应处于汽车悬架的最大高度位置(就像汽车被千斤顶顶起时那样)。
正确的车轮位置不正确的车轮位置
- 将车轮的每个表面都取消选中Intersection(相交)和Collision(碰撞)复选框。
- 为节点添加Rigid型body,并在Shape-based mass parameters(基于形状的质量参数)复选框被勾选的情况下将其取消选中。
-
将car_wheel属性分配给车轮并点击Edit property(编辑属性)按钮。
-
为车轮设置必要参数。
默认情况下,我们将前轮用于steering(转弯)和driving(行车),后轮用于hand brake(手刹)。
-
将其它车轮添加给car。 为每个添加的车轮都执行先前的步骤。
【不要】在Unigine Editor中旋转车轮! 对于左右两个车轮,您应该使用2种不同的车轮网格(meshes),或者使用具有右表面和左表面的1个车轮的mesh!如果您想克隆车轮节点,还请不要忘记为其设置属性参数。
将NodeReference(节点引用)添加给实体(Entity)
待创建完带有车轮的car节点之后,您就应该为已被创建的实体创建节点引用。 为此,您需按如下步骤操作:
- 选中您的car节点并点击Make a NodeReference(创建节点引用)按钮。
- 在打开的对话框窗口中选择要保存节点的文件夹,并指定节点文件的名称。
待NodeReference(节点引用)文件被创建之后,您就应该将其分配给实体。 为此,需按如下步骤操作:
- 通过点击Plugins(插件) -> Game Framework(游戏框架)打开Game Framework插件窗口。
-
选择您的实体并点击Select node file(选择节点文件)按钮。
-
在打开的对话框窗口中选择已保存的节点文件。
待NodeReference(节点引用)文件被创建之后,您就可以从虚拟世界移除car节点了。
现在,您拥有的是分配有节点的实体。 要想将该实体添加给虚拟世界,只需将其拖拽(从Game Framework插件窗口)进Editor即可。
如果您将car实体添加给了虚拟世界,但之后不知如何处理它(例如,car的车轮是位于地面之上的),这时您就应该为添加的节点设置参数。 为此,可打开Nodes(节点)窗口,选择添加的实体的节点并选择Entity Fields(实体字段)标签页。
在这里,您能找到大量可帮您调节您汽车行为的参数。 例如:
-
如果您想控制自己的car,就应该为Player(玩家)设置Driver Type(驾驶员类型)参数,同时设置Camera Target(摄像机目标点)复选框。
只有一个实体能启用Camera Target(摄像机目标点)复选框!
- 如果car的车轮是位于地面之上的,那还要设置Wheel Radius(车轮半径)参数。