3 Pluspunkte 0 Minuspunkte

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?

bezieht sich auf eine Antwort auf: Zufällige Rotation entlang einer Achse in Godot
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Nachdem du align_with_normal aufgerufen hast kannst du es anhand der Basis rotieren.

var rotation = bullet_hole.basis
rotation = rotation.rotated(collision.normal, randf())  # Drehung um die Normalenachse
bullet_hole.basis = rotation * bullet_hole.basis
von (884 Punkte)