UDK车辆系统指南

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

概况

虚幻引擎3中的车辆系统利用刚体物理引擎,并且允许您创建各式各样的车辆——轮式轿车、坦克、炮塔乃至飞行或者盘旋的车辆。本文件简要介绍车辆系统,其中包括参数的作用。

轮式车辆

虚幻引擎3中的轮式车辆被模拟为一种刚性单体。从轿车底盘向下射出射线以发现底盘碰到地面的位置,并在接触点位置根据诸多参数计算外力。不存在任何物理“车轮”对象——引擎仅仅存储每个车轮移动的速度,并利用它计算所生成的外力。

车辆类别

车辆 (Vehicle)

这是所有车辆中的最基本类别。它包含基本的控制输入Steering(方向盘),Throttle(油门)以及Rise(车身骨架),以及stub(轮毂),利用大量AI代码,支持计算机玩家驱动车辆。它还包括进出车辆所使用的代码。您也许想继续细分,创建固定炮塔之类的物件。

SVehicle

这是物理学应用车辆的基本类别。它包含支持轮式车辆的各种参数。

SimObj(模拟对象) SVehicleSimBase对象,处理诸多车辆模拟。更多这方面的内容,请参阅下文。
Wheels(车轮) SVehicleWheel(S车轮)对象阵列,控制各车轮参数(针对轮式车辆)。
COMOffset(COMO偏移) 车辆的质心位置,处于本地空间之中。
MaxSpeed(最大速度) 车辆速度最多能达到这个数值。

在SVehicle(S车辆)类别中,有些“输出”参数可应用于代码中的其他地方。

bVehicleOnGround(b地面车辆) 如果 任何 SVehicleWheel(S车轮)目前均接触地面,则为真(忽略与底盘等物体的接触)。
bIsInverted(b反转) 如果车辆多半翻倒,则为真。
bChassisTouchingGround(b底盘接触地面) 如果车辆底盘与地面之间存在任何接触,则为真。
bWasChassisTouchingGroundLastTick(b是底盘接触地面的最后一个标记) 如果车辆底盘与地面最后一个标记(last tick)之间曾有任何接触,则为真。

SVehicle(S车辆)还包含对“垂直约束”的支持。这是一种弹性约束,在车辆移动时可保持车辆直立,还可以用于特定类型的盘旋车辆。

bStayUpright(b保持直立) 使用这种保持直立的三维约束。
StayUprightRollResistAngle(保持直立抑制滚动角度) 车辆抑制滚动的角度。
StayUprightPitchResistAngle(保持直立抑制倾斜角度) 车辆抑制倾斜的角度。
StayUprightStiffness(保持直立硬度) 超过极限角度后,直立弹簧的硬度。
StayUprightDamping(保持直立阻尼) 超过极限角度后,直立弹簧的减震效果。

[next]

如果车辆翻转的话,SVehicle(S车辆)利用下列设置,能够再次翻转回来。

bCanFlip(b可空翻) 如果车辆能够被玩家直立起来,则为真。
UprightLiftStrength(直立提升力) 在直立期间,测算在车辆上施加的提升力。
UprightTorqueStrength(直立转矩力) 在直立期间,测算在车辆上施加的转矩。
UprightTime(直立时间) 直立外力/转矩的应用时间,单位为秒。

SVehicleSimBase(S车辆模拟库)

许多车辆模拟工作是在SVehicleSimBase(S车辆模拟库)对象中处理。这可被用作一个独立的对象,因而您可以为车辆创建一个游戏专用的SVehicles(S车辆)衍生的基本类别,但是对于不同类型的车辆而言,仍需重新使用代码。

WheelSuspensionStiffness(车轮用悬簧的硬度) 控制车轮用悬簧的硬度。
WheelSuspensionDamping(车轮悬簧阻尼) 控制车轮用悬簧的阻尼。
WheelSuspensionBias(车轮悬停偏移) 在车轮悬停的平衡位置上应用的偏移。
WheelInertia(车轮惯性)

车轮旋转时的“沉重”和艰难程度。

车轮模型

虚幻引擎3的车辆系统利用一种类似Pacejka的车轮模型(您可以利用Google,找到更多有关这种模型的信息)。车轮模型可分解为横向(侧面)和纵向(滚动方向)。对于每一种方向而言,均存在一种曲线,能够显示车轮和地面间的滑度与所形成的力度之间的关联情况。这种曲线与下图中的曲线较为相似:

在横向上,Slip Angle(滑角)被用作输入,而在纵向上,Slip Ratio(滑率)被用作输入。您指定这些曲线的方式是提供本示意图所示两点的坐标,参照为“Extremum(极值)”和“Asymtote(渐近线)”。Extremum(极值)指的是最大外力的点位,而Asymtote(渐近线)点位提供了无限滑动时的输出值。每个点位处的切线均视为平滑,然后在它们之间放置一个立体样条,从而确定曲线的最终形状。对于每条曲线而言,您所使用的属性包括:

Wheel..ExtremumSlip(车轮..极值滑动) 极值点位处的输入Slip(滑动)值。
Wheel..ExtremumValue(车轮..极值) 极值点位处的输出值。
Wheel..AsymptoteSlip(车轮.. 渐近线滑动) 渐近线点位处的输入Slip(滑动)值。
Wheel..AsymptoteValue(车轮.. 渐近线值) 渐近线点位处的输出值。
Wheel..StiffnessFactor(车轮..硬度系数) 输出值所应用的整体缩放系数。这将允许您快速修改车轮的整体“扭力”。

[next]

SVehicleWheel(S车轮)

对于每个标记而言,有多个数值可在SVehicleWheel(S车轮)上利用模拟代码进行设置,然后传送给物理属性:

Steer(转向) 车轮的转向角度,其中0度表示径直向前,正角度表示向右转。其单位为度。
MotorTorque(电机转矩) 在此车轮上应用的电机转矩。可为负值,实现车轮的机动化,从而向后旋转。
BrakeTorque(制动转矩) 在车轮上用于防止旋转的制动转矩量,始终为正值。
ChassisTorque(底盘转矩) 从此车轮应用到底盘上的转矩量,因此在加速等情况下,它将向上倾斜。

车轮的许多其他参数是通过模拟代码来应用,可判定上述数值情况。这些参数通常不会适时改变。

bPoweredWheel(b施加动力的车轮) 这个车轮是否应被施加动力。
bHandbrakeWheel(b手刹车轮) 在使用“手刹”时,它是否会降低这个车轮上的夹紧程度。
SteerFactor(转向系数) 这个车轮对于转向的响应程度。如果为0,则转向时,车轮不会转向。如果为1.0,则将会向右转。如果为-1.0,则会向左转,可在四轮转向配置中发挥作用。
SkelControlName(骨架控制名称) SkelControlWheel(骨架控制车轮)的名称应根据这个车轮来进行更新。更多信息,请参阅SettingUpVehicles(设置车辆) 文件。
BoneName(骨骼名称) 骨架网格物体中的骨骼名称,用于车轮的定位。
BoneOffset(骨骼偏移) 与利用BoneName(骨骼名称)指定的骨骼之间的偏移量,用以放置车轮。
WheelRadius(车轮半径) 车轮半径。
SuspensionTravel(垂直行程) 车轮击中“硬”停之前所允许的垂直行程。
WheelParticleSystem(车轮粒子系统) 一种可选的粒子系统,可为此车轮生成烟效。在每次标记时,将在这个粒子系统上设置一个名为“WheelSlip(车轮滑动)”的浮动参数,可用于修改衍生速度等。

SVehicleWheel(S车轮)还提供许多“输出”参数,将在每一帧中予以更新。

bWheelOnGround(b车轮在地面上) 这个特殊车轮是否正在地面上。
SpinVel(角速度) 这个车轮的当前角速度,单位为弧度/秒。
LongSlipRatio(纵滑率) 这个车轮的当前纵滑率。
LatSlipAngle(横滑角) 这个车轮的当前横滑角。
ContactNormal(接触法线) 车轮和地面之间的接触法线方向。
LongDirection(纵向) 三维空间中的车轮纵向矢量。
LatDirection(横向) 三维空间中的车轮横向矢量。
ContactForce(接触力量) 在上一帧中,这个车轮所施用的外力大小。
LongImpulse(纵向脉冲) 在上一帧中,纵向应用的脉冲大小 。
LatImpulse(横向脉冲) 在上一帧中,横向应用的脉冲大小 。
SuspensionPosition(悬浮位置) 车轮悬浮时的当前垂直位移。
CurrentRotation(当前旋转度) 车轮的当前旋转度,单位为度。

[next] ,

评论

{{ 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) }}