domingo, 13 de octubre de 2024

Explicacion de la combinacion de dos GDScript, uno borra por tiempo el otro por colision;

extends Area3D

var Esferauno = preload("res://PERSONAJES/MADRE Y FINAL/camera_3d_2_enfoca_rostro_de_madre.tscn")




func _ready() -> void:

pass # Replace with function body.




func _process(delta: float) -> void:

pass



func _on_area_entered(area):


var Esferauno = Esferauno.instantiate()


add_child(Esferauno)


var parent = get_parent()




get_node("CollisionShape3D2").queue_free()


pass # Replace with function body.



func _on_area_exited(area):



pass # Replace with function body.


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

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

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

extends Camera3D


var tiempo_transcurrido = 0.0


# Llamado cuando el nodo entra en el árbol de escena por primera vez.

func _ready() -> void:

pass # Replace with function body.


# Llamado cada cuadro. 'delta' es el tiempo transcurrido desde el cuadro anterior.

func _process(delta: float) -> void:

rotate_x(0.00009)

tiempo_transcurrido += delta


if tiempo_transcurrido >= 19.0:

queue_free()  # Elimina el nodo de la escena


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

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

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

EXPLICACION: 


Queria resolver un problema con mi actual juego en Godot 4.3 y en 3d, y lo resolví con estos dos GDScript, uno es para una simple cámara, muy sencillo simplemente tiene un GDScript para que rote unos grados en su eje “x” y un temporizador para que la cámara se borre alos pocos segundos 19 segundos. Esta cámara no esta en la escena del juego, va a a ser instanciada por el otro GDScript para un Area 3d; el de la cámara,tiene su propio GDScript para lo mencionado anteriormente rotación y borrado a los 19 segundos………


Pasemos al GDScript del Área 3d, cuando el player pasa por el Área 3d este toca un CollisionShape3D2 y produce la instacicion de la cámara, osea su aparición en la escena, como solo me interesa que esa cámara aga su función una sola vez el GDScript esta escrito para que a la vez que instancia la cámara que se borrara a los 19 segundos, borre también exclusivamente el CollisionShape3D2, así cuando el player vuelve a pasar por esa Área ya no vuelve a instanciar esa cámara,porque el CollisionShape3D2 lo provocaba, asi consigo jugar con dos cámara y distintos puntos de vista.


https://perico415.itch.io/

pronto este juego a la venta....................



Y un complemento una ampliacion del GDScript del Area3d para que borre tambien un techo.....

extends Area3D

var Esferauno = preload("res://PERSONAJES/MADRE Y FINAL/camera_3d_2_enfoca_rostro_de_madre.tscn")




func _ready() -> void:

pass # Replace with function body.




func _process(delta: float) -> void:

pass



func _on_area_entered(area):


var Esferauno = Esferauno.instantiate()


add_child(Esferauno)


var parent = get_parent()




get_node("CollisionShape3D2").queue_free()

get_node("CollisionShape3D3 de HIJO TIENE TECHO").queue_free()

pass # Replace with function body.



func _on_area_exited(area):



pass # Replace with function body.



viernes, 11 de octubre de 2024

Reflexiones, soluciones o trucos para aprobechar ciertos GDScript en Godot 4.3;

 extends Area3D

var Esferauno = preload("res://PUERTAS Y PUERTAS REVENTADAS/PUERTAROTA.tscn")

var Esferauno2 = preload("res://PUERTAS Y PUERTAS REVENTADAS/PUERTAROTA2.tscn")

var Esferauno3 = preload("res://PERSONAJES/EL AHORCADO MUERTO/camera_3d_FENIX-100.tscn")


# Called when the node enters the scene tree for the first time.

func _ready() -> void:

pass # Replace with function body.



# Called every frame. 'delta' is the elapsed time since the previous frame.

func _process(delta: float) -> void:

pass



func _on_area_entered(area):


var parent = get_parent()


var CollisionShape3Dcubo = parent.get_node("CollisionShape3D")



get_node("RigidBody3D PUERTA EMPUJO--INTENTARE BISAGRA").queue_free()


#get_node("RigidBody3D PUERTA EMPUJO--INTENTARE BISAGRA").queue_free()


get_node("CollisionShape3D2").queue_free()

get_node("Label3D").queue_free()

pass # Replace with function body.



func _on_area_exited(area):


var Esferauno = Esferauno.instantiate()


add_child(Esferauno)


var Esferauno2 = Esferauno2.instantiate()


add_child(Esferauno2)



var Esferauno3 = Esferauno3.instantiate()


add_child(Esferauno3)





pass # Replace with function body.




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

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

Notas interesantes sobre programar con GDScript:


Desarrollando mi actual videojuego en Godot 4.3 me e dado cuenta que habeces hay soluciones que son sorprendentemente muy muy sencillas, cosas de novato, aun no llevo 1 año con Godot y en este GDScript que se trata de instanciar unos objetos y de borrar de pantalla otros la idea era de borrar una puerta de una habitacion, eso en un principio, pero luego la habitacion tiene un techo que necesitaba borrar al destruirse la puerta y me estaba devanando los sesos para escribir codigo que hiciese esa funcion, al igual que el pomo de la puerta, escribir codigo para que ese pomo se borrase al chocar algo en la puerta y escribir codigo para que se borrase el techo al tocar algo la puerta………...pues nada simplemente pòniendo esos objetos de hijos de la puerta principal que se borra cuando el playe pasa por ella , y ya esta¡¡¡¡¡¡¡¡¡ ahora puedo poner un timbre un decorado en la puerta un ojo de buey lo que se tercie……..y solo necesito la linea de codigo que destruye la puerta principal.¡¡¡¡¡¡¡



domingo, 6 de octubre de 2024

Ejemplo de hacer una animación con blender y pasarla a Godot 4.3,;

 

Boy a explicar un ejemplo de hacer una animación con blender y pasarla a Godot 4.3,

he puesto un video mio también en el blog con mi voz para explicar de forma breve como lo voy haciendo, en blender primero de todo, ago un hueso el cual extruyo, o mas bien partiendo de el, ago otro que esta unido a el, y así sucesivamente se pueden dar formas que se quieran dar, un brazo en este caso, con unos dedos, cada hueso lo embuelbo con un cilindro que voy modelando, estos mas adelante se pueden unir o si se sabe muy bien utilizar blender a partir de la base de uno solo seleccionado las caras y con mucho trabajo y paciencia y dandole formas de brazo antebrazo mano y dedos.


En el video se puede ver también como selecciono los cilindros y los huesos y los fusiono para que cuando se aga la animación, el cilindro siga el movimiento del hueso……



Cuando e conseguido lo que buscaba lo pase a Godot4.3 en formato fbx, si usáis Godot 4.2 mejor usáis formato glTF.



Pongo también un video en el que se ve mejor los pasos de fusionas formas con huesos en blender.






El archivo fbx que contiene, que pase a Godot 4.3 tiene un script para que aga la animación, es el siguiente,,,,,,,



extends Node3D



# Called when the node enters the scene tree for the first time.

func _ready() -> void:

$AnimationPlayer.play("Esqueleto|MANOSADICA")

pass # Replace with function body.



# Called every frame. 'delta' is the elapsed time since the previous frame.

func _process(delta: float) -> void:

pass







Es muy sencillo de hacer, de escribir y un detalle es que la animación antes de pasarla a escena para que funcione con godot le marquéis la opción de PingPong para que se reproduzca continuamente en bucle y que estén también marcadas de azul las dos flechillas que recuerdan el símbolo del ying y del yang, esto en animación del Godot4.3 lo seleccionáis hay,,,, podría alargar mas estas explicaciones, pero es solo una pequeña vase para entender como funciona el tema, el resto a de ser ponerse delante del pc y practicar y practicar y practicar……...



jueves, 3 de octubre de 2024

Interesante script GDScript, para hacer un circuito cerrado por el que un objeto se mueve continuamente;

 extends PathFollow3D


var speedd =0.07

# Called when the node enters the scene tree for the first time.

func _ready() -> void:

pass # Replace with function body.



# Called every frame. 'delta' is the elapsed time since the previous frame.

func _process(delta: float) -> void:

progress_ratio +=delta *speedd

pass



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

EXPLICACION: ago una silla que se mueve sola en una habitacion, utilizo los nodos de padre Path3D de hijo PathFollow3D de nieto un tscn una escena de una silla o un obj, el script lo contiene el nodo PathFollow3D y con este script la silla va moviéndose sola por el escenario......este tema es novedoso para mi lo acabo de probar ahora y me funciona ya iré profundizando mas en el tema.....lo vi en un video de YouTube, lo del tema PathFollow3D y bueno e de practicar y practicar a la primera funciona pero sale diferente de lo que se busca.......



viernes, 27 de septiembre de 2024

Con GDScript para Godot 4.3 ago que un texto vibre tipo Label3D;

 extends Label3D


var strength = 0.009 # Intensidad del temblor

var speed = 0.009     # Velocidad del temblor


func _process(delta):

# Calculamos una pequeña variación aleatoria en las coordenadas X e Y

var random_x = randf_range(-strength, strength)

var random_y = randf_range(-strength, strength)


# Aplicamos la variación al nodo

global_position += Vector3(random_x, random_y, 0.0)