はじめに
レーシングゲームやドライビングシミュレーター、探索ゲームで乗り物を扱いたいとき、単純な物理では不十分です。VehicleBody3Dなら、サスペンション・タイヤ・ステアリングを含む本格的な車両物理を簡単に実装できます。このノードはWASDキーでの操作に対応させるだけで、リアルな乗り物の挙動を再現します。
VehicleBody3Dとは?
VehicleBody3Dは、車両(自動車、バイク、乗り物)の物理演算を実現するノードです。RigidBody3Dを拡張した特殊なボディで、VehicleWheel3Dを子ノードとして4つ(または複数)配置することで、エンジン駆動・ステアリング・サスペンション・ブレーキなどの車両機構を再現します。
継承ツリー:

このノードを使うべき場面
使うべき場面:
- レースゲームやドライビングシミュレーターの実装
- 3Dアクションゲームの乗り物(車、バイク、戦車)
- 探索ゲームやRPGにおける移動手段の乗り物化
- 物理エンジンと連動した現実的な加速・ブレーキ・ハンドルの挙動
- タイヤのスリップやグリップを考慮した走行物理
使わない場面:
- 単純な移動物体(通常のRigidBody3Dで十分)
- 飛行物体や水上移動(AirshipBody3DやWaterBody3Dが適切)
主なプロパティと機能
| プロパティ | 型 | 説明 | 使用例 |
|---|---|---|---|
engine_force | float | エンジンの駆動力(プラスで前進、マイナスで後退) | vehicle.engine_force = 500.0 |
brake | float | ブレーキの制動力(0~1000) | vehicle.brake = 100.0 |
steering | float | ハンドルの角度(ラジアン、左負数・右正数) | vehicle.steering = 0.2 |
mass | float | 車体の質量(kg。デフォルト1) | vehicle.mass = 1000.0 |
linear_velocity | Vector3 | 現在の移動速度 | print(vehicle.linear_velocity.length()) |
VehicleWheel3Dの重要プロパティ
| プロパティ | 型 | 説明 | 使用例 |
|---|---|---|---|
use_as_traction | bool | このタイヤがエンジン駆動を受けるか(駆動輪) | wheel.use_as_traction = true(前輪2つ、後輪2つなど) |
use_as_steering | bool | このタイヤがハンドル操作に反応するか(操舵輪) | wheel.use_as_steering = true(通常は前輪) |
wheel_radius | float | タイヤの半径(m) | wheel.wheel_radius = 0.4 |
suspension_stiffness | float | サスペンションの硬さ(大きいほど硬い) | wheel.suspension_stiffness = 15.0 |
suspension_travel | float | サスペンションの最大移動距離(m) | wheel.suspension_travel = 0.3 |
friction_slip | float | タイヤのグリップ力(大きいほど滑りにくい) | wheel.friction_slip = 10.5 |
GDScriptコード例1:基本的な車両操作
extends VehicleBody3D
@export var max_engine_force = 400.0
@export var max_brake_force = 100.0
@export var max_steer_angle = 0.4
func _physics_process(delta):
# キー入力の取得
var input_vector = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
# ハンドル操作(左右)
steering = move_toward(steering, input_vector.x * max_steer_angle, 2.0 * delta)
# アクセルとブレーキ
if input_vector.y > 0:
engine_force = max_engine_force * input_vector.y
brake = 0.0
elif input_vector.y < 0:
engine_force = 0.0
brake = max_brake_force * -input_vector.y
else:
engine_force = 0.0
brake = 0.0
# 速度の表示(デバッグ用)
var speed_kmh = linear_velocity.length() * 3.6
print("速度: %.1f km/h" % speed_kmh)
GDScriptコード例2:オフロード車の設定(サスペンション調整)
extends VehicleBody3D
func _ready():
# 車体設定
mass = 1200.0
# 4つのタイヤを設定
var wheels = get_children().filter(func(child): return child is VehicleWheel3D)
for i in range(min(4, wheels.size())):
var wheel = wheels[i]
# 基本設定
wheel.wheel_radius = 0.5
wheel.suspension_travel = 0.4 # オフロード用に大きめ
wheel.suspension_stiffness = 8.0 # 柔らかめ(凸凹対応)
wheel.friction_slip = 12.0 # グリップ力を高める
# 駆動輪・操舵輪の設定
if i < 2: # 前輪
wheel.use_as_steering = true
wheel.use_as_traction = true
else: # 後輪
wheel.use_as_steering = false
wheel.use_as_traction = true
print("オフロード車が準備できました")
もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ | 型 | 説明 | 実装例 |
|---|---|---|---|
gravity_scale | float | 重力の影響度(デフォルト1.0) | vehicle.gravity_scale = 1.5 |
linear_damp | float | 空気抵抗(大きいほど速度が減速する) | vehicle.linear_damp = 0.1 |
angular_damp | float | 回転方向の空気抵抗 | vehicle.angular_damp = 0.5 |
wheel.damping | float | サスペンションのダンピング(振動減衰) | wheel.damping = 0.3 |
wheel.roll_influence | float | ロールオーバー時の安定性(0~1) | wheel.roll_influence = 0.1 |
get_speed_kmh() | メソッド | 現在速度をkm/hで取得 | var speed = linear_velocity.length() * 3.6 |
カスタマイズの実装例:ギアシステムの追加
extends VehicleBody3D
var current_gear = 1
var max_gear = 5
var engine_rpm = 0.0
@export var max_engine_force_per_gear = [100.0, 200.0, 300.0, 350.0, 400.0]
func _physics_process(delta):
var input_vector = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
# ギアチェンジ
if Input.is_action_just_pressed("ui_up") and current_gear < max_gear:
current_gear += 1
if Input.is_action_just_pressed("ui_down") and current_gear > 1:
current_gear -= 1
# ギアに応じた駆動力を適用
var max_force = max_engine_force_per_gear[current_gear - 1]
engine_force = max_force * input_vector.y
steering = input_vector.x * 0.4
print("ギア: %d" % current_gear)
まとめ
VehicleBody3Dは、ゲームに本格的な車両物理をもたらす最強のノードです。
- RigidBody3Dを拡張した車両専用ボディで、現実的な加速・ブレーキ・ハンドルが実装できます
- VehicleWheel3Dを4つ配置するだけで、タイヤの接地・サスペンション・駆動が自動で動作します
- ゲーム内の乗り物や移動手段として、大きな表現の幅が広がります
次回は、TPS・アクションカメラに最適な「SpringArm3D」について詳しく解説します。
関連性の高いノード解説記事
- Godot入門:Node
- Godot入門:Node3D
- Godot入門:RigidBody3D
- Godot入門:SpringArm3D
- Godot入門:VehicleBody3D


コメント