|
@@ -157,12 +157,14 @@ This script adds basic navigation movement to a Node3D with a NavigationAgent3D
|
|
|
.. code-tab:: gdscript GDScript
|
|
|
|
|
|
extends Node3D
|
|
|
- # script on agent parent node, connect the agent 'velocity_computed' signal for collision avoidance
|
|
|
|
|
|
@export var movement_speed: float = 4.0
|
|
|
@onready var navigation_agent: NavigationAgent3D = get_node("NavigationAgent3D")
|
|
|
var movement_delta: float
|
|
|
|
|
|
+ func _ready() -> void:
|
|
|
+ navigation_agent.velocity_computed.connect(Callable(_on_velocity_computed))
|
|
|
+
|
|
|
func set_movement_target(movement_target: Vector3):
|
|
|
navigation_agent.set_target_position(movement_target)
|
|
|
|
|
@@ -172,13 +174,15 @@ This script adds basic navigation movement to a Node3D with a NavigationAgent3D
|
|
|
|
|
|
movement_delta = movement_speed * delta
|
|
|
var next_path_position: Vector3 = navigation_agent.get_next_path_position()
|
|
|
- var current_agent_position: Vector3 = global_transform.origin
|
|
|
+ var current_agent_position: Vector3 = global_position
|
|
|
var new_velocity: Vector3 = (next_path_position - current_agent_position).normalized() * movement_delta
|
|
|
- navigation_agent.set_velocity(new_velocity)
|
|
|
+ if navigation_agent.avoidance_enabled:
|
|
|
+ navigation_agent.set_velocity(new_velocity)
|
|
|
+ else:
|
|
|
+ _on_velocity_computed(new_velocity)
|
|
|
|
|
|
- func _on_NavigationAgent3D_velocity_computed(safe_velocity: Vector3):
|
|
|
- # Move Node3D with the computed `safe_velocity` to avoid dynamic obstacles.
|
|
|
- global_transform.origin = global_transform.origin.move_toward(global_transform.origin + safe_velocity, movement_delta)
|
|
|
+ func _on_velocity_computed(safe_velocity: Vector3) -> void:
|
|
|
+ global_position = global_position.move_toward(global_position + safe_velocity, movement_delta)
|
|
|
|
|
|
Actor as CharacterBody3D
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@@ -189,11 +193,12 @@ This script adds basic navigation movement to a CharacterBody3D with a Navigatio
|
|
|
.. code-tab:: gdscript GDScript
|
|
|
|
|
|
extends CharacterBody3D
|
|
|
- # script on agent parent node, connect the agent 'velocity_computed' signal for collision avoidance
|
|
|
|
|
|
@export var movement_speed: float = 4.0
|
|
|
@onready var navigation_agent: NavigationAgent3D = get_node("NavigationAgent3D")
|
|
|
- var movement_delta: float
|
|
|
+
|
|
|
+ func _ready() -> void:
|
|
|
+ navigation_agent.velocity_computed.connect(Callable(_on_velocity_computed))
|
|
|
|
|
|
func set_movement_target(movement_target: Vector3):
|
|
|
navigation_agent.set_target_position(movement_target)
|
|
@@ -202,14 +207,15 @@ This script adds basic navigation movement to a CharacterBody3D with a Navigatio
|
|
|
if navigation_agent.is_navigation_finished():
|
|
|
return
|
|
|
|
|
|
- movement_delta = movement_speed * delta
|
|
|
var next_path_position: Vector3 = navigation_agent.get_next_path_position()
|
|
|
- var current_agent_position: Vector3 = global_transform.origin
|
|
|
- var new_velocity: Vector3 = (next_path_position - current_agent_position).normalized() * movement_delta
|
|
|
- navigation_agent.set_velocity(new_velocity)
|
|
|
-
|
|
|
- func _on_NavigationAgent3D_velocity_computed(safe_velocity: Vector3):
|
|
|
- # Move CharacterBody3D with the computed `safe_velocity` to avoid dynamic obstacles.
|
|
|
+ var current_agent_position: Vector3 = global_position
|
|
|
+ var new_velocity: Vector3 = (next_path_position - current_agent_position).normalized() * movement_speed
|
|
|
+ if navigation_agent.avoidance_enabled:
|
|
|
+ navigation_agent.set_velocity(new_velocity)
|
|
|
+ else:
|
|
|
+ _on_velocity_computed(new_velocity)
|
|
|
+
|
|
|
+ func _on_velocity_computed(safe_velocity: Vector3):
|
|
|
velocity = safe_velocity
|
|
|
move_and_slide()
|
|
|
|
|
@@ -222,10 +228,13 @@ This script adds basic navigation movement to a RigidBody3D with a NavigationAge
|
|
|
.. code-tab:: gdscript GDScript
|
|
|
|
|
|
extends RigidBody3D
|
|
|
- # script on agent parent node, connect the agent 'velocity_computed' signal for collision avoidance
|
|
|
|
|
|
+ @export var movement_speed: float = 4.0
|
|
|
@onready var navigation_agent: NavigationAgent3D = get_node("NavigationAgent3D")
|
|
|
|
|
|
+ func _ready() -> void:
|
|
|
+ navigation_agent.velocity_computed.connect(Callable(_on_velocity_computed))
|
|
|
+
|
|
|
func set_movement_target(movement_target: Vector3):
|
|
|
navigation_agent.set_target_position(movement_target)
|
|
|
|
|
@@ -234,10 +243,12 @@ This script adds basic navigation movement to a RigidBody3D with a NavigationAge
|
|
|
return
|
|
|
|
|
|
var next_path_position: Vector3 = navigation_agent.get_next_path_position()
|
|
|
- var current_agent_position: Vector3 = global_transform.origin
|
|
|
- var new_velocity: Vector3 = (next_path_position - current_agent_position).normalized() * velocity
|
|
|
- navigation_agent.set_velocity(new_velocity)
|
|
|
-
|
|
|
- func _on_NavigationAgent3D_velocity_computed(safe_velocity: Vector3):
|
|
|
- # Move RigidBody3D with the computed `safe_velocity` to avoid dynamic obstacles.
|
|
|
- set_linear_velocity(safe_velocity)
|
|
|
+ var current_agent_position: Vector3 = global_position
|
|
|
+ var new_velocity: Vector3 = (next_path_position - current_agent_position).normalized() * movement_speed
|
|
|
+ if navigation_agent.avoidance_enabled:
|
|
|
+ navigation_agent.set_velocity(new_velocity)
|
|
|
+ else:
|
|
|
+ _on_velocity_computed(new_velocity)
|
|
|
+
|
|
|
+ func _on_velocity_computed(safe_velocity: Vector3):
|
|
|
+ linear_velocity = safe_velocity
|