lima-city: Webhosting, Domains und Cloud
2 Pluspunkte 0 Minuspunkte

Wie kann ich an der Stelle wo ein Raycast mit einem Colider kollidiert, ein kleines schwarzes Plane als Art Bullethole als Child des Colider befestigen das sich automatisch so ausrichtet dass es aussieht als würde es auf dem Colider kleben?

func shoot():
	var space = get_world_3d().direct_space_state
	var query = PhysicsRayQueryParameters3D.create(head.global_position, head.global_position - head.global_transform.basis.z * 50)
	var collision = space.intersect_ray(query)
	if collision:
		var plane = MeshInstance3D.new()
		plane.mesh = PlaneMesh.new()
		plane.mesh.size = Vector2(0.1, 0.1)
		plane.material_override = StandardMaterial3D.new()
		plane.material_override.albedo_color = Color(1, 0, 0) # Rot
		plane.global_position = hit_position
		get_tree().root.add_child(plane)
von  

2 Antworten

1 Pluspunkt 0 Minuspunkte

Richte das Planemesh anhand des rechten Winkel der Kolission aus.

var up = collision.normal
var forward = Vector3(0, 0, -1)  # Standardrichtung (nach vorne)
if abs(up.dot(forward)) > 0.9:
    forward = Vector3(0, -1, 0)
var right = forward.cross(up).normalized()
forward = up.cross(right).normalized()
plane.global_transform.basis = Basis(right, up, forward)
von (716 Punkte)  
0 Pluspunkte 0 Minuspunkte

Dazu kannst du dir eine Funktion schreiben.

func align_with_normal(element, normal):
    element.basis.y = normal
    element.basis.x = -element.basis.z.cross(normal)
    element.basis = element.basis.orthonormalized()
    return element

und das Bullethole anhand der Normalen des Raycast ausrichten.

plane.global_transform = align_with_normal(plane.global_transform, collision.normal)
von (397 Punkte)  
Jetzt scheinen die beiden Oberflächen aber direkt übereinander zu liegen. Kann man das Bullethole ein kleines bisschen vor die Collision setzen?
Du kannst das Bullethole entlang der Normalen (Rechter Winkel auf die Oberfläche) verschieben.

plane.global_position += collision.normal * 0.01
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Beiträge bewerten
  • Inhalte bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft. Unser Ziel: Guter Inhalt. Für alle.

2.3k Fragen

2.8k Antworten

260 Kommentare

12 Nutzer