Godot Version
4.2.1 stable.official
Question
I’m following along with the tutorial “Arcade-style Car” on KidsCanCode, and I’m at the “At this point, you can try it out. You should be able to accelerate forward and back (but not steer yet).” point - however, I’m unable to move at all. I DID make a scene called main (node3d), put a Floor (StaticBody3d) as a child, a CollisionShape3d and MeshInstance3d as children of Floor, and put in my Player into the main scene.
I am getting the warning “This node has no shape, so it can’t collide or interact with other objects.” on my player in the main scene.
What am I doing wrong?
My Player scene:
I’ve included what I think (Sorry, new to Godot) is the relevant code/files:
main.tscn (Main scene)
[gd_scene load_steps=6 format=3 uid="uid://brxb1yej0wcq3"]
[ext_resource type="PackedScene" uid="uid://c6uwk1h344nke" path="res://Player/Player.tscn" id="1_33dof"]
[ext_resource type="Texture2D" uid="uid://nmvyuw171oli" path="res://Art/Textures/Orange/texture_10.png" id="1_uxd6c"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1vdoa"]
size = Vector3(500, 2, 500)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u5rnh"]
albedo_texture = ExtResource("1_uxd6c")
[sub_resource type="BoxMesh" id="BoxMesh_dj4i5"]
size = Vector3(500, 2, 500)
[node name="Main" type="Node3D"]
[node name="Floor" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, -1, 2.08165e-12)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"]
shape = SubResource("BoxShape3D_1vdoa")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Floor"]
material_override = SubResource("StandardMaterial3D_u5rnh")
mesh = SubResource("BoxMesh_dj4i5")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.0218847, 0.999761, 0, -0.999761, 0.0218847, -1.82925, 17.6957, -5.13216)
shadow_enabled = true
[node name="Player" parent="." instance=ExtResource("1_33dof")]
up_direction = Vector3(0.57735, 0.57735, 0.57735)
Player.tscn
[gd_scene load_steps=18 format=3 uid="uid://c6uwk1h344nke"]
[ext_resource type="Script" path="res://Player/Car.gd" id="2_t87xx"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_o40tp"]
friction = 0.5
bounce = 0.1
[sub_resource type="SphereShape3D" id="SphereShape3D_g1dxw"]
radius = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bwxrp"]
resource_name = "plastic"
albedo_color = Color(0.376471, 0.376471, 0.376471, 1)
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4wx7c"]
resource_name = "carTire"
albedo_color = Color(0.239216, 0.239216, 0.239216, 1)
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p3hqd"]
resource_name = "paintRed"
albedo_color = Color(1, 0.227451, 0.360134, 1)
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygcg4"]
resource_name = "_defaultMat"
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_robd8"]
resource_name = "window"
albedo_color = Color(0.937255, 0.937255, 0.937255, 1)
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g47kc"]
resource_name = "lightBack"
albedo_color = Color(1, 0.34902, 0.227451, 1)
metallic = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_isgvs"]
resource_name = "lightFront"
albedo_color = Color(0.960784, 0.72549, 0.258824, 1)
metallic = 1.0
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_uwa7j")
[node name="Player" type="CharacterBody3D"]
up_direction = Vector3(0.57735, 0.57735, 0.57735)
[node name="SpringArm3D" type="SpringArm3D" parent="."]
transform = Transform3D(1, -4.68079e-16, 3.27752e-16, 3.27752e-16, 0.939693, 0.34202, -4.68079e-16, -0.34202, 0.939693, 2.08165e-12, 3, 3)
spring_length = 5.0
[node name="Camera3D" type="Camera3D" parent="SpringArm3D"]
fov = 90.0
[node name="Car" type="RigidBody3D" parent="."]
collision_layer = 2
physics_material_override = SubResource("PhysicsMaterial_o40tp")
gravity_scale = 5.0
lock_rotation = true
angular_damp = 10.0
script = ExtResource("2_t87xx")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Car"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 0.592863, 2.08165e-12)
shape = SubResource("SphereShape3D_g1dxw")
[node name="CarMesh" type="Node3D" parent="Car"]
[node name="sedanSports" type="Node3D" parent="Car/CarMesh"]
[node name="body" type="MeshInstance3D" parent="Car/CarMesh/sedanSports"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4545e-14, 0.2, 0)
mesh = SubResource("ArrayMesh_heyet")
skeleton = NodePath("")
[node name="spoiler" type="MeshInstance3D" parent="Car/CarMesh/sedanSports/body"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.77529e-15, 0.4, 1.06869)
mesh = SubResource("ArrayMesh_rc4l2")
skeleton = NodePath("")
[node name="wheel_backLeft" type="MeshInstance3D" parent="Car/CarMesh/sedanSports"]
transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.3, 0.66)
mesh = SubResource("ArrayMesh_awj5l")
skeleton = NodePath("")
[node name="wheel_backRight" type="MeshInstance3D" parent="Car/CarMesh/sedanSports"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0.3, 0.66)
mesh = SubResource("ArrayMesh_awj5l")
skeleton = NodePath("")
[node name="wheel_frontLeft" type="MeshInstance3D" parent="Car/CarMesh/sedanSports"]
transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 0.3, -0.66)
mesh = SubResource("ArrayMesh_awj5l")
skeleton = NodePath("")
[node name="wheel_frontRight" type="MeshInstance3D" parent="Car/CarMesh/sedanSports"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0.3, -0.66)
mesh = SubResource("ArrayMesh_awj5l")
skeleton = NodePath("")
[node name="RayCast3D" type="RayCast3D" parent="Car/CarMesh"]
exclude_parent = false
I had to remove a bunch of “vertex_data” from the player.tscn file.
Car.gd:
extends RigidBody3D
@onready var car_mesh = $CarMesh
@onready var body_mesh = $CarMesh
@onready var ground_ray = $CarMesh/RayCast3D
@onready var right_wheel = $CarMesh/sedanSports/wheel_frontRight
@onready var left_wheel = $CarMesh/sedanSports/wheel_frontLeft
# Where to place the car mesh relative to the sphere
var sphere_offset = Vector3.DOWN
# Engine power
@export var acceleration = 35.0
# Turn amount, in degrees
@export var steering = 18.0
# How quickly the car turns
@export var turn_speed = 4.0
# Below this speed, the car doesn't turn
@export var turn_stop_limit = 0.75
# Variables for input values
var speed_input = 0
var turn_input = 0
func _physics_process(delta):
car_mesh.position = position + sphere_offset
if ground_ray.is_colliding():
apply_central_force(-car_mesh.global_transform.basis.z * speed_input)
func _process(delta):
if not ground_ray.is_colliding():
return
speed_input = Input.get_axis("brake", "accelerate") * acceleration
turn_input = Input.get_axis("steer_right", "steer_left") * deg_to_rad(steering)
right_wheel.rotation.y = turn_input
left_wheel.rotation.y = turn_input
# rotate car mesh
if linear_velocity.length() > turn_stop_limit:
var new_basis = car_mesh.global_transform.basis.rotated(car_mesh.global_transform.basis.y, turn_input)
car_mesh.global_transform.basis = car_mesh.global_transform.basis.slerp(new_basis, turn_speed * delta)
car_mesh.global_transform = car_mesh.global_transform.orthonormalized()
project.godot:
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Car"
run/main_scene="res://Levels/main.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/icon="res://icon.svg"
[display]
window/size/viewport_width=1920
window/size/viewport_height=1080
window/size/mode=3
[input]
jump={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
]
}
boost={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
toggle_mouselook={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
brake={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194327,"key_label":0,"unicode":0,"echo":false,"script":null)
, null]
}
accelerate={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
steer_right={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
steer_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
Apologies for pasting the tscn files, I’m unsure where to upload a .zip of the project.