UDK设置车辆教程

修改
鏉ユ簮: 上帝宝贝 浏览 6335 日期 2011-08-27 0

这节课我们主要讲设置车辆方面的知识,课节的内容挺多,写的很详细。参考着图片认真的学一下。

为车辆建模

UnrealEngine 3中的车辆使用一个骨架网格物体来渲染。从而能够轻松把由多个移动部分车轮、悬架、挡板、车门等组成的网格物体作为一个资源导入。车辆可以有很多不同样式——但是代码确实假设它们有一个刚性底盘。如果您的车辆有轮子,您可以使用任意您想要的数量,而且它们可以是不同尺寸。当创建一个在UE3中使用的汽车网格物体时,应记住一些关键的东西:

  • 根骨骼必须在车辆的主要刚性底盘占有主要权重。
  • 车辆应指向+X轴远方且以+Z轴为“上”方向,且根“底盘”骨骼也应该沿+X 轴指向远方而以+Z轴为“上”方向。在添加任何骨骼前使车辆指向正确的方向是一个很好的主意。
  • 车轮与悬架的任意其它骨骼应该是底盘骨骼的直接子物体。 不要 使车轮成为悬架骨骼的子物体——让它们成为底盘的子物体。
  • 将每个轮胎骨骼放置在您希望车轮旋转的地方(包括滚动及操纵方向)。骨骼的一个轴应该指向滚动轴而另一个应该沿着操纵方向轴指向(一旦车辆被导入,您在设置AnimTree的时候就可以告诉引擎使用哪个轴)。
  • 当导出该车辆时,确保车轮骨骼被移动到悬挂系统最大伸长范围的位置。

您将车辆骨架网格物体导出/导入引擎的方法与常规骨架网格物体完全相同。

创建一个物理资源

一旦您已经将车辆网格物体导入引擎,您需要为其创建一个物理资源,为其定义碰撞形状。要这样做您需要使用PhAT(物理资源工具)——在PhysicsAssetTool页面上有关于此工具的信息。

对车辆使用的物理资源中唯一重要的体就是根“底盘”骨骼。您不需要为任何其它骨骼创建物理体——例如您无需为车轮创建关节。车轮模拟全部由车辆物理代码操作。只有底盘体将被作为一个物理对象来创建,并被用于车辆碰撞。PhysicsAssets被用于直线碰撞检测以及玩家对车辆的碰撞,因此您可能希望为其它骨骼创建碰撞外形来获得更准确的碰撞——特别是在这些骨骼可能移动的情况下(门,挡板,转动架等)。

游戏中车辆体积及惯性的计算是基于底盘碰撞几何形体积,以及应用于底盘BodySetup 的PhysicalMaterial 密度属性。要修改游戏中车辆的质量您可以修改PhysicalMaterial,或者调整底盘BodySetup的MassScale属性。

创建一个Anim树

[next]

尽管您也许不能在车辆上播放动画,您仍然需要为其创建一个AnimTree,以使其正确工作。这是由于AnimTrees也包含在游戏中逐渐移动每块骨骼的SkelControls。UE3车辆系统使用一种特殊类型的骨骼控制器来移动车轮骨骼,使其与欲建立的仿真匹配。您可以在Using Skeletal Controllers页面上找到更多关于车轮SkelControls的信息。

“WheelDisplacement”,“WheelRoll”,与“WheelSteering”设置是简单可视的,因此您可以在编辑器中看到物体在正确的轴上向正确的方向移动。它们并不真正改变车辆的性能或者限制。

“WheelMaxRenderDisplacement”设置将设置Z轴反转的上限。这将决定悬架的移动范围。故将数值输入“WheelDisplacement”中,直观地确定您想将何处作为车轮的运动上限。然后将最终值输入到“WheelMaxRenderDisplacement”将其设置为一个限制。当在游戏中使用车辆时,车轮将在0与您在“WheelMaxRenderDisplacement”中指定的数字间上下移动。使用剩下的设置可以更改及转换Roll and Steering axis(滚动及操纵方向轴)。

您需要设置SkelControlWheel 的ControlName属性。这将被传递到物理模拟,使其知道在您驱动时更新哪个控制。

设置悬架骨骼

除了在您驱动时有使车轮运动的控制,您可能想要添加一些控制悬架臂的其它控制骨骼。有一种类型的SkelControl叫做“查看(look at)”控制器,它告诉骨骼总是将一个轴指向空间中的另一个对象,骨骼或点。此节点用于控制悬架骨骼。

蓝色钻石形状为瞄准目标。“TargetLocationSpace”设置确定该瞄准目标是相对谁而言的:它自身,它的父物体,actor空间,三维空间,或者在这种情况下,另一个骨骼。在“TargetSpaceBoneName”设置中输入您想瞄准的骨骼名称。“Target Location”设置将瞄准目标位置相对“Target Location Space”设置进行偏移。您也可以通过链接LookAt节点后的SkelControlSingleBone节点来偏移目标,从而偏移悬架骨骼的旋转。

如果在您使用的3D软件坐标轴的朝向是不同的,您可以更改或者反转LookAtAxis或者UpAxis。根据您悬架的复杂性,您可以使用LookAt节点与SingleBone节点创建活塞与其它连接的移动部件。

[next]

LookAt还可用于抵消连接车轮的部件旋转,例如挡板,它需要与操纵方向一起旋转并与悬架一起移动,但是不能向前或者向后旋转。要这样做,添加一块骨骼,使车轮骨骼成为其父物体,但是位于完全相同的位置。将挡板网格物体绑定在此骨骼上。直接在车轮骨骼上添加另一块骨骼。这将是挡板的瞄准对象。在 AnimTree中,向挡板骨骼添加一个LookAt约束,瞄准挡板瞄准的骨骼。在LookAt节点设置中,将LookAt Axis 与Up Axis都设置为Z轴。在悬架运动过程中,现在挡板将随着车轮运动,以及操纵方向,但是不会旋转。

创建脚本文件

那么现在所有资源都已经正确设置,您需要将所有信息输入到一个UnrealScript .uc文件。您需要的信息是:

  • SkeletalMesh的名称。
  • PhysicsAsset的名称。
  • AnimTree的名称。
  • 每个车轮骨骼的名称。
  • 每个SkelControlWheel的名称。
  • 每个车轮的半径。

以下是您为车辆将这些信息输入到一个.uc文件中的方法:

Class MyVehicle extends SVehicle; Defaultproperties { Begin Object Name=SVehicleMesh SkeletalMesh=SkeletalMesh'VehiclePackage.VehicleMesh' AnimTreeTemplate=AnimTree'VehiclePackage.VehicleAnimTree' PhysicsAsset=PhysicsAsset'VehiclePackage.VehiclePhysAsset' End Object Begin Object Class=SVehicleWheel Name=RRWheel BoneName="R_R_Tire" SkelControlName="R_R_Tire_Cont" WheelRadius=25 End Object Wheels(0)=RRWheel }

对车辆的每个轮子,您将有一个SvehicleWheel属性。

调整车辆

有很多控制操纵车辆的参数。有些是每个车轮的参数,位于每个SvehicleWheel对象中,而那些影响整个车辆的参数位于SVehicle与SVehicleSim对象中。关于每个参数的解释可以在VehicleGuide页面上获取。

[next]

有用的控制命令

虚幻引擎在调整车辆时一个非常有用的特性是“editactor”控制命令。当驱动车辆时您可以在控制台输入“editactor class=svehicle”,将弹出一个属性窗口。这使得您能够在驱动时调整几乎所有的参数,使得iteration(叠代式改进)非常迅速。

这节课就到这了,有关设置车辆的教程我们还会再发的,希望继续关注我们。

想了解更多的内容请登陆www.zf3d.com

,

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}