lima-city: Webhosting, Domains und Cloud
1 Pluspunkt 0 Minuspunkte

Wenn ich einen Raycast visualisiere wird die Linie korrekt gezeichnet aber die Sphere landet irgendwo. Wie kann das sein wenn der Endpunkt der Linie der Punkt ist wo die Sphere sein sollte?

func _fire():
	var space = get_world_3d().direct_space_state
	var query = PhysicsRayQueryParameters3D.create(camera.global_position, camera.global_position - camera.global_transform.basis.z * 150)
	var collision = space.intersect_ray(query)
	if collision:
		
		print("Colission with " + collision.collider.get_parent().name)
		
		var hit_position = collision.position
		var hit_normal = collision.normal
		var hit_collider = collision.collider

		var line = ImmediateMesh.new()
		line.surface_begin(Mesh.PRIMITIVE_LINES)
		line.surface_add_vertex(head.global_position)
		line.surface_add_vertex(hit_position)
		line.surface_end()
		
		var line_instance = MeshInstance3D.new()
		line_instance.mesh = line
		line_instance.material_override = StandardMaterial3D.new()
		line_instance.material_override.albedo_color = Color(0, 1, 0)  # Grün
		get_tree().root.add_child(line_instance)
		
		var sphere = MeshInstance3D.new()
		sphere.mesh = SphereMesh.new()
		sphere.mesh.radius = 0.5  # Größe der Kugel
		sphere.material_override = StandardMaterial3D.new()
		sphere.material_override.albedo_color = Color(1, 0, 0)  # Rot
		sphere.global_position = hit_position
		collision.collider.get_parent().add_child(sphere)
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du fügst die Sphere als Child des Collider ein

collision.collider.get_parent().add_child(sphere)

Dabei wird die Position der Sphere relativ zum neuen Parent Transform festgelegt. global_position wird dabei in den lokalen Raum des neuen Parent konvertiert. Positioniere die Sphere wie die Linie auch am Root Node deiner Szene. Ersetze

collision.collider.get_parent().add_child(sphere) 
sphere.global_position = hit_position

durch

get_tree().root.add_child(sphere)  
sphere.global_position = hit_position 
von (720 Punkte)  
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
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

261 Kommentare

13 Nutzer