Ich habe ein Bullethole
var bullet_hole = MeshInstance3D.new()
bullet_hole.mesh = PlaneMesh.new()
bullet_hole.mesh.size = Vector3(1, 1, 1)
bullet_hole.material_override = StandardMaterial3D.new()
bullet_hole.material_override.albedo_color = Color(1, 0, 0) # red
get_tree().root.add_child(bullet_hole)
bullet_hole.global_position = collision.position + collision.normal * 0.001
bullet_hole.global_transform = align_with_normal(bullet_hole.global_transform, collision.normal)
Die Funktion align_with_normal richtet das Bullethole anhand der Oberfläche aus auf der der Raycast aufgetroffen ist.
func align_with_normal(xform, normal):
xform.basis.y = normal
xform.basis.x = -xform.basis.z.cross(normal)
xform.basis = xform.basis.orthonormalized()
return xform
Wenn ich das Bullethole zufällig rotieren möchte nachdem es positioniert ist funktioniert das zwar am Boden aber nicht an Wänden o.ä.
plane.rotate_y(randf())
Wie kann ich den Plane rotieren nachdem er an der Oberfläche des Collider ausgerichtet wurde?