概况
虚幻引擎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(保持直立阻尼) | 超过极限角度后,直立弹簧的减震效果。 |
如果车辆翻转的话,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(车轮..硬度系数) | 输出值所应用的整体缩放系数。这将允许您快速修改车轮的整体“扭力”。 |
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(当前旋转度) | 车轮的当前旋转度,单位为度。 |
评论