--- title: 未命名 date: 2025-04-06 12:14:25 excerpt: tags: rating: ⭐ --- # 前言 - UE4.27:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/vehicle-user-guide?application_version=4.27 - UE5.4:https://dev.epicgames.com/documentation/en-us/unreal-engine/vehicles-in-unreal-engine?application_version=5.4 # 项目结构 - Vehicle蓝图 - Vehicle SkeletalMesh - Physics Asset - Vehicle动画资产 - 多个Wheel Blueprints. - TireConfig Data Asset Vehicle c++项目: - AWheeledVehiclePawn -> AVehiclePawn - AVehicleOffroadCar - AVehicleSportsCar - # c++ Vehicle Template ## AVehiclePawn 父类为`AWheeledVehiclePawn` -> `APawn`。`AVehiclePawn`的其他派生类为(C++模版实现类): - AVehicleOffroadCar:越野车 - AVehicleSportsCar:跑车 ## UVehicleWheelFront(前轮)& UVehicleWheelRear(后轮) 父类为`UChaosVehicleWheel`。两者的差别是: - 轴向类型不同。 - 前轮的转向角度为40度,默认为50度。 - 前轮的bAffectedBySteering为true,即受到转向系统影响。 - 后轮的bAffectedByHandbrake、bAffectedByEngine为true,即受到刹车与发动机影响。 ```c++ UVehicleWheelFront::UVehicleWheelFront() { AxleType = EAxleType::Front; bAffectedBySteering = true; MaxSteerAngle = 40.f; } ``` ```c++ UVehicleWheelRear::UVehicleWheelRear() { AxleType = EAxleType::Rear; bAffectedByHandbrake = true; bAffectedByEngine = true; } ``` ### UVehicleSportsWheel ```c++ 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 ```c++ 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 ## 动画蓝图中的相关逻辑