lunes, 26 de enero de 2026

Dos formas de movimientos aleatorios de un CollisionShape3D;

 extends CollisionShape3D


# --- AJUSTES DE MOVIMIENTO ---

@export var velocidad : float = 5.0

@export var margen_movimiento : Vector3 = Vector3(3.0, 2.0, 3.0) # Cuánto se mueve en X, Y, Z


# --- VARIABLES INTERNAS ---

var posicion_inicial : Vector3

var objetivo : Vector3


func _ready():

posicion_inicial = position

_nuevo_punto_aleatorio()


func _process(delta):

# Movemos el láser hacia el punto objetivo

position = position.move_toward(objetivo, velocidad * delta)

# Si llega al punto, elige otro

if position.distance_to(objetivo) < 0.1:

_nuevo_punto_aleatorio()


func _nuevo_punto_aleatorio():

# Calculamos un punto nuevo que NO se salga del margen

var x_random = randf_range(posicion_inicial.x - margen_movimiento.x, posicion_inicial.x + margen_movimiento.x)

var y_random = randf_range(posicion_inicial.y - margen_movimiento.y, posicion_inicial.y + margen_movimiento.y)

var z_random = randf_range(posicion_inicial.z - margen_movimiento.z, posicion_inicial.z + margen_movimiento.z)

objetivo = Vector3(x_random, y_random, z_random)

------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------


extends CollisionShape3D

# El rango máximo que se podrá mover desde su posición original
@export var amplitud : float = 89.05 
# La velocidad a la que cambia de posición
@export var rapidez : float = 0.7 

var posicion_original : Vector3

func _ready():
# Guardamos la posición inicial para que no se escape al infinito
posicion_original = position

func _process(delta):
# Creamos un movimiento aleatorio para cada eje
var movimiento = Vector3(
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud),
randf_range(-amplitud, amplitud)
)
# Aplicamos el movimiento suavizado con lerp para que no sea un teletransporte brusco
position = position.lerp(posicion_original + movimiento, rapidez * delta)



No hay comentarios:

Publicar un comentario