jueves, 7 de agosto de 2025

extends CharacterBody3D SE MUEVE ALEATORIAMENTE POR EL ESCENARIO INCLUSO INSTANCIADO;

 extends CharacterBody3D


# Exportamos la variable de velocidad.

@export var velocidad : float = 2.0


# Un array para guardar las 4 direcciones de movimiento.

# 0: Eje Z (adelante)

# 1: Eje X (derecha)

# 2: Eje -X (izquierda)

# 3: Eje -Z (atrás)

var direcciones : Array = [

Vector3(0, 0, 1),   # Adelante en el eje Z

Vector3(1, 0, 0),   # Derecha en el eje X

Vector3(-1, 0, 0),  # Izquierda en el eje -X

Vector3(0, 0, -1)   # Atrás en el eje -Z

]


# Un índice para saber en qué dirección del array estamos.

var paso_actual : int = 0


# Variables para manejar el tiempo manualmente.

var tiempo_transcurrido : float = 0.0

var intervalo_de_cambio : float = 0.5


func _physics_process(delta):

# Sumamos el tiempo de cada fotograma a nuestra variable.

tiempo_transcurrido += delta

# Si el tiempo transcurrido es mayor o igual al intervalo de 0.5 segundos...

if tiempo_transcurrido >= intervalo_de_cambio:

# Reiniciamos el contador de tiempo restando el intervalo.

# Esto evita errores si el tiempo excede el límite por poco.

tiempo_transcurrido -= intervalo_de_cambio

# Incrementamos el contador para pasar a la siguiente dirección.

paso_actual += 1

# Usamos el operador de módulo (%) para que el contador vuelva a 0

# después de llegar a 3 (0, 1, 2, 3, 0, 1...).

paso_actual %= 4


# Obtenemos la dirección actual del array y la multiplicamos por la velocidad.

velocity = direcciones[paso_actual] * velocidad

# Aplicamos el movimiento y gestionamos las colisiones.

move_and_slide()