jueves, 1 de mayo de 2025

GDScript camara3d se traslada a unas coordenadas especificas en unos segundos y despues en otros segundos transcurridos se borra;Godot 4.4;

 extends Camera3D


var tiempo_transcurrido: float = 0.0

var tiempo_para_trasladar: float = 21.0

var tiempo_para_borrar_despues_traslado: float = 5.0

var trasladada: bool = false

var coordenadas_destino: Vector3 = Vector3(-23.386, 108.385, -14.401)


func _process(delta: float) -> void:

tiempo_transcurrido += delta


if !trasladada:

if tiempo_transcurrido >= tiempo_para_trasladar:

global_transform.origin = coordenadas_destino

trasladada = true

tiempo_transcurrido = 0.0 # Reiniciamos el tiempo para la cuenta del borrado

else:

if tiempo_transcurrido >= tiempo_para_borrar_despues_traslado:

queue_free()

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

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

Explicacion: muy util para hacer cambios de camara de puntos de vista y enfocar por varios puntos de la escena del juego, en mi juego actual la camara cae por una torre, esta asociada a un RigidBody3D cae lentamente visionando la altura de una torre mediebal, y cuando llega al suelo enfoca lo alto de la torre un primer plano de una princesa prisionera, al pasar unos segundo se borra la camara definitivamente y utiliza la del player para seguir jugando, la que esta activada con el (current).




En el GDScript inferior ademas añade la inclinacion de rotacion del eje Y de la camara....tambien se puede variar......


extends Camera3D

var tiempo_transcurrido: float = 0.0
var tiempo_para_trasladar: float = 21.0
var tiempo_para_borrar_despues_traslado: float = 5.0
var trasladada: bool = false
var coordenadas_destino: Vector3 = Vector3(-23.386, 108.385, -14.401)
var rotacion_destino_y: float = 0.14

func _process(delta: float) -> void:
tiempo_transcurrido += delta

if !trasladada:
if tiempo_transcurrido >= tiempo_para_trasladar:
global_transform.origin = coordenadas_destino
# Establecemos la rotación en el eje Y
rotation.y = rotacion_destino_y
trasladada = true
tiempo_transcurrido = 0.0 # Reiniciamos el tiempo para la cuenta del borrado
else:
if tiempo_transcurrido >= tiempo_para_borrar_despues_traslado:
queue_free()