用XSI制作可以破坏的物体

开篇 

这篇文章讲述怎么用XSI创建可以破坏的物体,并且把这个(些)物体导出到CryEngine 2中。当你读完后,你就能了解怎么制作这样的东西。写这篇文章的时候,我对此也只是有一些了解,但是对读这篇文章的人来说,一切都足够了。需要的基础是知道怎么从XSI中导出物体到CryEngine2。本文分两步来讲 - 一是用分部分来做,二是用链接点来做。

用各部分来创建模型

创建模型 

当创建可以破坏的物体的实体的时候,你需要分别创建不可破坏的部分和可以破坏的部分。你要先创建一个完整的版本,然后再创建破坏能产生的几个部分。在下图中,原始的网格是完整的部分(整个部分是一个整体),同时有破坏时的两个部分 (上面一个网格和下面一个网格). 他们应该在位置上是重合的。注意:当你导出模型到游戏中,引擎会把完整的网格和另外两个破坏后的网格都安置到你在编辑器的位置。所以,你必须把两个位置重合,否则,游戏中完整的部分受到破坏时,破坏的部分产生的效果就会像是传送到某个位置。原因是引擎在物体遭破坏后,会停止对完整物体的渲染,而开始对破坏后的部分的渲染。

一句话: 把两个类型的模型的位置重合


命名规则 

破坏后的部分建立好模型后,命名需要遵循一定的规则. 基本上,你可以按照你想要的方式来命名,只要你的第一个字符是下划线。举例来说: _part1, _part2, _mypart, _barreldestroyed等等。

用XSI制作可以破坏的物体_第1张图片

模型导出 

正常情况下,在你从XSI中导出模型到CryEngine 2的时候,你需要点击”Create CryExportNode“,现在你就需要这么把模型导出。把所有的模型部分(代表完整的和被破坏后的所有模型)都放到CryExportNode中。选择CryExportNode并且点击"Add Object Property"。这会把"ObjectProperties"加到你的清单中。为了告诉引擎哪些是属于被破坏后的部分,你需要用"piece = "这个代码来列出这些网格(用逗号分隔多个部分)。举例:

pieces=_cyl_part1,_cyl_part2

 

你也可以加入质量和密度(如"mass=10")但是我没有测过. XSI中要做的事情就这么多。现在就像平时导出一样,你可以把模型导出。


游戏中使用你的模型

最难的部分开始。开启一张地图,从Rollbar的Entity->Physics->DestroyableObject拖出一个到地图上. 把它的模型改成你刚导出的,删除ModelSubObject属性中的“Main”DestroyedSubObejct中的字串也一样删除。其他属性你可以自己设置。

完成。

用XSI制作可以破坏的物体_第2张图片

完成的产品截图

下图是一个圆柱在受冲击前后的对比图。

用XSI制作可以破坏的物体_第3张图片节点链接的方法

建模阶段 

第二种方法是用链接点。这是用在建筑物上的方法。你也可以用joints来实现刚才的效果 - 只要把两个部分在开始的时候就用节点链接起来。这一步我用上两幅图片,两幅图都展示了同一个东西-CryJointNodes的放置。当你在Crytek工具栏上点击"Create CryJointNode"的时候,你会看到一个很小的节点产生。看起来像是在线框模式下的模型。



你可以在任何需要链接的地方放置CryJointNode。如果节点的包围和太小,让它放大以便它能包住两个需要链接的部分。可以参考下图看一下究竟是什么意思。



代码 

在explorer窗口,打开一个节点并且双击"JointProperties". 现在加入下面的代码:

limit=10000

这个是节点能承受的力量上限。意味着如果节点受到的力量超出这个值,那么这个节点就会断开。10000是个经验值。


用XSI制作可以破坏的物体_第4张图片
同样在explore窗口,点击某个网格,从Crytek工具栏上,选择”"Add ObjectProperty". 双击ObjectProperty加入以下代码:

entity
mass=250

第一行告诉引擎这个网格是一个实体,也就是可交互的。第二行告知这个网格代表的物体的质量是250。然后,其他网格按照这个方式都做好类似的步骤。


用XSI制作可以破坏的物体_第5张图片导出

跟上面的方法不一样, 这里你不需要给任何东西命名。仅有的一件事情是把节点放到正确的地方。当你做完这个事情后,建立一个CryExportNode并且给它赋上一个名称。记住不要勾选 "MERGEOBJECTS"。我第一次就忘记了这个细节,导致在这个问题上纠缠了几个小时。再建立一个Null (Get->Primite->NULL)并把它放到CryExportNode (不要改变null的任何属性). 我不知道这个是不是必须的,但是我知道这个可行。不管怎样,把你的模型放到NULL中(在CryExportNode里面) 。然后,导出,完成。


游戏中

在Sandbox中的唯一需要做的事情就是把刚才的导出作为一个Brush来导入进来。下面是我做的模型在游戏中的截图。


用XSI制作可以破坏的物体_第6张图片

你可能感兴趣的:(游戏,object,null,工具,引擎,sandbox)