3.4 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
未命名 2025-04-06 12:14:25

前言

项目结构

  • Vehicle蓝图
    • Vehicle SkeletalMesh
      • Physics Asset
    • Vehicle动画资产
    • 多个Wheel Blueprints.
    • TireConfig Data Asset

Vehicle c++项目:

  • AWheeledVehiclePawn -> AVehiclePawn
    • AVehicleOffroadCar
    • AVehicleSportsCar

c++ Vehicle Template

AVehiclePawn

父类为AWheeledVehiclePawn -> APawnAVehiclePawn的其他派生类为C++模版实现类):

  • AVehicleOffroadCar越野车
  • AVehicleSportsCar跑车

UVehicleWheelFront前轮& UVehicleWheelRear后轮

父类为UChaosVehicleWheel。两者的差别是:

  • 轴向类型不同。
  • 前轮的转向角度为40度默认为50度。
  • 前轮的bAffectedBySteering为true即受到转向系统影响。
  • 后轮的bAffectedByHandbrake、bAffectedByEngine为true即受到刹车与发动机影响。
UVehicleWheelFront::UVehicleWheelFront()  
{  
    AxleType = EAxleType::Front;  
    bAffectedBySteering = true;  
    MaxSteerAngle = 40.f;  
}
UVehicleWheelRear::UVehicleWheelRear()  
{  
    AxleType = EAxleType::Rear;  
    bAffectedByHandbrake = true;  
    bAffectedByEngine = true;  
}

UVehicleSportsWheel

UVehicleSportsWheelFront::UVehicleSportsWheelFront()  
{  
    WheelRadius = 39.0f;  
    WheelWidth = 35.0f;  
    FrictionForceMultiplier = 3.0f;//摩擦力系数  
  
    MaxBrakeTorque = 4500.0f;//最大制动扭矩  
    MaxHandBrakeTorque = 6000.0f;//最大手制动扭矩
}

UVehicleSportsWheelRear::UVehicleSportsWheelRear()  
{  
    WheelRadius = 40.f;  
    WheelWidth = 40.0f;  
    FrictionForceMultiplier = 4.0f;
    SlipThreshold = 100.0f;//滑动阈值  
    SkidThreshold = 100.0f;//防滑阈值  
    MaxSteerAngle = 0.0f;//最大转向角  
    MaxHandBrakeTorque = 6000.0f;
}

UVehicleOffroadWheel

UVehicleOffroadWheelFront::UVehicleOffroadWheelFront()  
{  
    WheelRadius = 50.0f;  
    CorneringStiffness = 750.0f;//转弯刚度  
    FrictionForceMultiplier = 4.0f;  
    bAffectedByEngine = true;//实现4轮驱动  
  
    SuspensionMaxRaise = 20.0f;//悬挂架最大提升高度(父类是10.0)
    SuspensionMaxDrop = 20.0f;//悬挂力最大下降(父类是10.0)
    WheelLoadRatio = 1.0f;//车轮负载率(父类是0.5)
    SpringRate = 100.0f;//弹簧率(父类是250.0) 
    SpringPreload = 100.0f;//弹簧预紧力(父类是50.0) 
    SweepShape = ESweepShape::Shapecast;  
  
    MaxBrakeTorque = 3000.0f;  
    MaxHandBrakeTorque = 6000.0f;  
}

UVehicleOffroadWheelRear::UVehicleOffroadWheelRear()  
{  
    WheelRadius = 50.f;  
    CorneringStiffness = 750.0f;  
    FrictionForceMultiplier = 4.0f;  
    SuspensionMaxRaise = 20.0f;  
    SuspensionMaxDrop = 20.0f;  
    WheelLoadRatio = 1.0f;  
    SpringRate = 100.0f;  
    SpringPreload = 100.0f;  
    SweepShape = ESweepShape::Shapecast;  
  
    MaxBrakeTorque = 3000.0f;  
    MaxHandBrakeTorque = 6000.0f;  
}

AVehiclePlayerController

父类为APlayerController。

  1. 添加UI与UI更新逻辑。
  2. 绑定增强输入组件。
  3. OnPossess()绑定AVehiclePawn。

UChaosWheeledVehicleMovementComponent

动画蓝图中的相关逻辑