Ejemplo de IA persecucion de enemigos con Godot 4.4;
extends CharacterBody3D
const SPEED = 9.0
const ACCELERATION = 8.5 # Ajusta este valor para la velocidad de respuesta deseada
@onready var navAgent = $NavigationAgent3D
#@onready var target = $"../Player" # Descomenta esta línea si tu jugador se llama "Player"
@onready var target = $"../CharacterBody3D" # Asegúrate de que esta ruta sea correcta para tu jugador
func _physics_process(delta: float) -> void:
# Elimina o comenta la rotación manual si quieres que siempre mire al objetivo
# rotate_y(0.11)
# Añadir gravedad.
if not is_on_floor():
velocity += get_gravity() * delta
if target: # Verifica si el objetivo existe
_update_target_position() # Actualiza la posición del objetivo primero
var currentLocation = global_transform.origin
var nextLocation = navAgent.get_next_path_position()
var nextVelocity = (nextLocation - currentLocation).normalized() * SPEED
velocity = velocity.move_toward(nextVelocity, ACCELERATION * delta) # Usa delta para suavizar la aceleración
move_and_slide()
# Orientar al enemigo hacia la dirección del movimiento (siguiente punto de la ruta)
if nextVelocity.length_squared() > 0.01: # Evita rotaciones cuando no hay movimiento significativo
look_at(global_transform.origin + nextVelocity, Vector3.UP)
else:
print("El objetivo (jugador) no existe.")
func _update_target_position():
if target:
navAgent.target_position = target.global_transform.origin
else:
print("El objetivo (jugador) no existe. No se puede actualizar la posición del NavigationAgent.")
s
solucinado el tema de que persigan de frente y no de espaldas
No hay comentarios:
Publicar un comentario