3 Pluspunkte 0 Minuspunkte

Wie kann ich in Godot 4 einen Raycast in gdscript schreiben? Ich habe eine Camera auf meinem Player 

Base
-> MeshInstance3D (Floor)
-> CharacterBody3D (Player)
  -> MeshInstance3D
  -> Colissionshape3D
  -> Node3D (Neck)
    -> Camera3D
-> MeshInstance3D2 (Box1)
-> MeshInstance3D2 (Box2)

und möchte einen Raycast geradeaus z.B 5 Meter machen und alle Collider wissen mit denen er kollidiert ist.

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Um einen Raycast auszuführen musst du auf den sogenannten "Space" zugreifen.

extends Node

func _physics_process(delta):

    var from = transform.origin # Startpunkt des Strahls
    var to = Vector3(0, 0, -100) # Endpunkt des Strahls (100 Einheiten vorwärts)

    # var space_state = get_world2d().direct_space_state
    var space_state = get_world().direct_space_state

    var result = space_state.intersect_ray(from, to)

    if result.size() > 0:
        var collider = result["collider"]
        print("Kollision mit:", collider)

Hier wird intersect_ray verwendet, um zu überprüfen, ob der Strahl von "from" nach "to" mit einem Objekt im Raum kollidiert. Das Ergebnis ist ein Dictionary.

von  
0 Pluspunkte 0 Minuspunkte

Füge einen Raycast3D-Node im Scenetree als Child deiner Camera3D 

Base
-> MeshInstance3D (Floor)
-> CharacterBody3D (Player)
  -> MeshInstance3D
  -> Colissionshape3D
  -> Node3D (Neck)
    -> Camera3D
      -> Raycast3D <-- Script hieran binden
-> MeshInstance3D2 (Box1)
-> MeshInstance3D2 (Box2)

und binde ein neues Script daran.

extends RayCast3D

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
    if is_colliding():
        print("colliding with ", get_collider())
    else:
        print("not colliding")
von (776 Punkte)  
Länge eines Raycast3D in Godot