Fix player falling through terrain
Player gets its own CapsuleShape3D (was a small CylinderShape3D, never actually shared with anything — the shared oversized capsule flagged earlier only affects the 4 mountain props, unrelated to the player). Real cause of the fall-through: the crown collision is a zero-thickness trimesh and the player spawned with exactly zero clearance sitting right on the surface, a classic tunneling setup. Fixed by giving the trimesh backface_collision (collide from both sides) and spawning the player with a bit of headroom so it settles onto the floor instead of starting embedded in it. Verified headless: player now falls from spawn height to rest exactly on the surface and stays on_floor=true over a 3s simulated run.
This commit is contained in:
parent
817c701bd1
commit
4b21780f6d
@ -13,9 +13,9 @@
|
||||
ambient_light_color = Color(0, 0, 0.31764707, 1)
|
||||
ambient_light_energy = 0.3
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_7mycd"]
|
||||
height = 0.5
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_player"]
|
||||
radius = 0.16
|
||||
height = 0.5
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_lquwl"]
|
||||
atlas = ExtResource("2_h2yge")
|
||||
@ -177,11 +177,11 @@ environment = SubResource("Environment_h2yge")
|
||||
script = ExtResource("1_terrain")
|
||||
|
||||
[node name="Player" type="CharacterBody3D" parent="." unique_id=1504574304 groups=["player"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
script = ExtResource("1_0xm2m")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Player" unique_id=1483851051]
|
||||
shape = SubResource("CylinderShape3D_7mycd")
|
||||
shape = SubResource("CapsuleShape3D_player")
|
||||
|
||||
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="Player" unique_id=155581900]
|
||||
billboard = 2
|
||||
|
||||
@ -84,7 +84,9 @@ func _build_crown() -> void:
|
||||
mi.mesh = mesh
|
||||
body.add_child(mi)
|
||||
var cs := CollisionShape3D.new()
|
||||
cs.shape = mesh.create_trimesh_shape()
|
||||
var trimesh := mesh.create_trimesh_shape()
|
||||
trimesh.backface_collision = true # dünnes Mesh: von beiden Seiten kollidieren, kein Durchfallen
|
||||
cs.shape = trimesh
|
||||
body.add_child(cs)
|
||||
add_child(body)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user