VehicleBody3D
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — VehicleBody3D
VehicleBody3D
节点继承关系
继承链:Node → Node3D → PhysicsBody3D → RigidBody3D → VehicleBody3D
继承自 RigidBody3D
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Mass | 质量 |
| 属性 | GravityScale | 重力倍数 |
| 属性 | LinearVelocity | 线速度 |
| 属性 | ContactMonitor | 是否监测碰撞 |
| 信号 | body_entered | 有物理体碰到它 |
| 信号 | body_exited | 有物理体离开它 |
| 方法 | ApplyCentralImpulse() | 施加中心瞬间冲量 |
| 方法 | ApplyForce() | 施加持续力 |
继承自 PhysicsBody3D
| 类型 | 名称 | 说明 |
|---|---|---|
| 方法 | MoveAndCollide() | 移动并检测碰撞 |
| 方法 | TestMove() | 测试移动是否会碰撞(不实际移动) |
继承自 Node3D
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Position | 本地位置(X / Y / Z) |
| 属性 | GlobalPosition | 全局位置 |
| 属性 | Rotation | 旋转角度(欧拉角,弧度) |
| 属性 | Scale | 缩放比例 |
| 属性 | TopLevel | 是否脱离父节点的变换 |
| 方法 | LookAt() | 朝向目标点 |
| 方法 | ToGlobal() | 本地坐标转全局坐标 |
| 方法 | ToLocal() | 全局坐标转本地坐标 |
| 方法 | RotateX/Y/Z() | 绕指定轴旋转 |
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
专门用来模拟汽车等轮式载具的 3D 物理体。它继承自 RigidBody3D,但额外提供了引擎功率、刹车、转向等车辆特有的功能。
想象你把一辆真车拆成零件来研究——车身是一个大铁块(VehicleBody3D),轮子是独立的物理零件(VehicleWheel3D),引擎提供动力让轮子转,轮子转了车就走了。VehicleBody3D 就是那辆"车身的铁块"。
使用频率:★★ 偶尔使用——仅在需要车辆模拟的游戏中使用。
节点用途
- 汽车、卡车等轮式载具
- 坦克、装甲车
- 任何有轮子的 3D 载具
使用场景
典型场景
- 赛车游戏:玩家驾驶的赛车
- 开放世界游戏:可以驾驶的车辆
- 载具战斗:坦克、装甲车
不适用场景
- 简单的角色控制 → 使用 CharacterBody3D
- 不需要轮子的飞行器 → 使用 RigidBody3D
常用节点搭配
| 搭配节点 | 用途 | 必需? |
|---|---|---|
| VehicleWheel3D | 车轮(至少 4 个) | 必需 |
| CollisionShape3D | 车身碰撞 | 必需 |
| MeshInstance3D | 车身 3D 模型 | 推荐 |
| Camera3D | 跟随车辆的镜头 | 推荐 |
典型节点树:
Car (VehicleBody3D)
├── CollisionShape3D
├── MeshInstance3D(车身模型)
├── FrontLeftWheel (VehicleWheel3D)
├── FrontRightWheel (VehicleWheel3D)
├── RearLeftWheel (VehicleWheel3D)
└── RearRightWheel (VehicleWheel3D)生效必备素材/资源
| 资源 | 类型 | 说明 |
|---|---|---|
| 车身碰撞形状(BoxShape3D) | Shape3D 资源 | 赋给 CollisionShape3D |
| 车身 3D 模型 | .glb/.gltf 文件 | 赋给 MeshInstance3D |
节点属性与信号
车辆参数
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
EngineForce | float | 0.0 | — | 引擎力(正值=前进,负值=后退) |
Brake | float | 0.0 | — | 刹车力度 |
Steering | float | 0.0 | — | 转向角度(弧度) |
物理属性(继承自 RigidBody3D)
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
Mass | float | 40.0 | RigidBody3D | 车身质量 |
Bounce | float | 0.0 | RigidBody3D | 弹性系数 |
Friction | float | 1.0 | RigidBody3D | 摩擦系数 |
信号
| 信号 | 触发时机 | 继承自 | 说明 |
|---|---|---|---|
| 继承 RigidBody3D 的所有信号 | — | RigidBody3D | body_entered、body_exited 等 |
常用方法
| 方法 | 返回值 | 说明 |
|---|---|---|
| 继承 RigidBody3D 的所有方法 | — | ApplyForce()、ApplyImpulse() 等 |
代码示例
C
using Godot;
/// <summary>
/// 简单的汽车控制器
/// 节点结构:Car (VehicleBody3D) + 4 个 VehicleWheel3D
/// </summary>
public partial class CarController : VehicleBody3D
{
[Export] public float ExMaxEngineForce = 200.0f; // 最大引擎力
[Export] public float ExMaxBrakeForce = 50.0f; // 最大刹车力
[Export] public float ExMaxSteering = 0.5f; // 最大转向角度
public override void _PhysicsProcess(double delta)
{
// ---- 引擎/刹车 ----
float engineInput = Input.GetAxis("accelerate", "brake");
EngineForce = engineInput * ExMaxEngineForce;
// 刹车(只在按住刹车键时生效)
if (Input.IsActionPressed("handbrake"))
Brake = ExMaxBrakeForce;
else
Brake = 0f;
// ---- 转向 ----
float steerInput = Input.GetAxis("steer_left", "steer_right");
Steering = steerInput * ExMaxSteering;
}
}GDScript
# 简单的汽车控制器
# 节点结构:Car (VehicleBody3D) + 4 个 VehicleWheel3D
extends VehicleBody3D
@export var max_engine_force: float = 200.0 # 最大引擎力
@export var max_brake_force: float = 50.0 # 最大刹车力
@export var max_steering: float = 0.5 # 最大转向角度
func _physics_process(_delta: float) -> void:
# ---- 引擎/刹车 ----
var engine_input := Input.get_axis("accelerate", "brake")
engine_force = engine_input * max_engine_force
# 刹车(只在按住刹车键时生效)
if Input.is_action_pressed("handbrake"):
brake = max_brake_force
else:
brake = 0.0
# ---- 转向 ----
var steer_input := Input.get_axis("steer_left", "steer_right")
steering = steer_input * max_steeringVehicleBody3D 的注意事项
- 车身质量建议设置较大(如 40~100),太小会导致车辆飘
- 轮子(VehicleWheel3D)必须作为 VehicleBody3D 的子节点
- 轮子位置要和车身模型的轮子位置对齐
- 转向角度通常只应用于前轮(通过 VehicleWheel3D 的
Steering属性控制)
