jueves, 31 de octubre de 2024

Nuevo proyecto con Godot 4.3, videojuego de terror y misterio para publicar estas navidades u enero del 2025;

 

https://perico415.itch.io/

Arranque de desarrollo de un nuevo trabajo en el que intentare hacer efectos cinematograficos en este videojuego de terror y misterio, imitando al cine , que es mi principal fuente de inspiracion y de motivacion y entretenimiento, creo que estoy decantandome por un estilo personal de tipo comic en el que el jugador maneja al personaje, y cuenta una historia corta, me encanta muchisimo Stephen King, seguramente lo que hago tiene influencias del cine que veo, lector de libros no soy, la verdad, y Stephen King, tiene una coleccion grande de libros, pero su cine si lo devoro, lo que si leo ultimamente, son libros de historia del desarrollo de videojuegos que han tenido muchisimo exito, y esto me ayuda tambien a escribir este blog, el leido como se desarrollo Call of dutfy, ahora estoy leyendo Tomb Raider

ley Doom , y tengo para leer, Los Sims, Half-Life, Fifa, Grand Theft Auto, todos juegos que tengo del pasado y los e jugado en mayor o menor medida.

lunes, 28 de octubre de 2024

GDScript ejemplo para personaje activa su animacion y lo traslada hacia adelante;

 extends Node3D



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

func _ready() -> void:

$AnimationPlayer.play("MakeHuman default skeleton|LACAVEZAENLAMANOS")

pass # Replace with function body.



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

func _process(delta: float) -> void:

translate(Vector3(0,0,0.01))# PARA UNA CONSTANCIA DE MOVIMIENTO CONTINUO

pass

domingo, 27 de octubre de 2024

Practica de pegar un arma a la mano de un personaje con blender para seguir sus movimientos, ;

 Practica de pegar un arma a la mano de un personaje con blender para seguir sus movimientos, se puede exportar a Godot 4.3, este video son pruebas que hice y esta aun muy verde, pero al final funciono el resultado, se ha de estudiar y practicar, presione Control +P para sacar opciones que consiguen el resultado.....Pongo el video pero reconozco que aun no se como logre pegar el arma a la mano, en fin a repasarlo estudiarlo y practicarlo

EL FORMATO DE LOS OBJETOS SON TODOS FBX LA PISTOLA Y EL PERSONAJE

Ejemplo para Godot 4.3 de Label en GDScript para que se escale y desescale el texto y se mueva;

 extends Label


var velocidad_y = 0.48

var velocidad_x = 0.73

var velocidad_escala = 0.01

var direccion_y = 1

var direccion_x = 1

var direccion_escala = 1


func _process(delta: float) -> void:

# Movimiento

position.y += velocidad_y * direccion_y * delta

position.x += velocidad_x * direccion_x * delta


# Escala (corregido)

scale = scale * (1 + velocidad_escala * direccion_escala * delta)


# Verificar límites de movimiento

if position.y >= get_viewport().size.y - get_rect().size.y or position.y <= 0:

direccion_y *= -1

if position.x >= get_viewport().size.x - get_rect().size.x or position.x <= 0:

direccion_x *= -1


# Verificar límites de escala (ajusta según tus necesidades)

if scale.x >= 2:

direccion_escala = -1

elif scale.x <= 0.5:

direccion_escala = 1

Ejemplo para que un Label ascienda y descienda alternativamente en la pantalla del videojuego en GDScript;

 extends Label


var velocidad_y = 0.48

var velocidad_x = 0.73

var direccion_y = 1  # 1: hacia abajo, -1: hacia arriba

var direccion_x = 1  # 1: hacia la derecha, -1: hacia la izquierda


func _process(delta: float) -> void:

# Mueve el Label en la dirección actual

position.y += velocidad_y * direccion_y

position.x += velocidad_x * direccion_x


# Verifica si ha llegado a un límite y cambia la dirección

if position.y >= get_viewport().size.y - get_rect().size.y or position.y <= 0:

direccion_y *= -1

if position.x >= get_viewport().size.x - get_rect().size.x or position.x <= 0:

direccion_x *= -1

Ejemplo de rotacion de 90 grados y a la inversa de -90 grados con GDScript;

 extends Camera3D


var target_rotation = PI / 2  # Ángulo de rotación objetivo (90 grados en radianes)

var current_rotation = 0.0

var rotation_speed = 0.1  # Ajusta esta variable para cambiar la velocidad de rotación

var is_rotating_forward = true  # Indica si la rotación es en sentido horario (true) o antihorario (false)


func _process(delta: float) -> void:

if is_rotating_forward:

if current_rotation < target_rotation:

rotate_y(delta * rotation_speed)

current_rotation += delta * rotation_speed

if current_rotation >= target_rotation:

current_rotation = target_rotation

is_rotating_forward = false  # Cambiar dirección de rotación

else:

if current_rotation > -target_rotation:

rotate_y(-delta * rotation_speed)

current_rotation -= delta * rotation_speed

if current_rotation <= -target_rotation:

current_rotation = -target_rotation

is_rotating_forward = true  # Cambiar dirección de rotación

Ejemplo de rotacion con GDScript a 90 grados lentamente;

 extends Camera3D


var target_rotation = PI / 2  # Ángulo de rotación objetivo (90 grados en radianes)

var current_rotation = 0.0

var rotation_speed = 0.1  # Ajusta esta variable para cambiar la velocidad de rotación


func _process(delta: float) -> void:

if current_rotation < target_rotation:

rotate_y(delta * rotation_speed)

current_rotation += delta * rotation_speed

if current_rotation >= target_rotation:

current_rotation = target_rotation

else:

rotation.y = target_rotation


Ejemplo de rotacion de 180 grados lentamente; con GDScript;

 extends Camera3D


var target_rotation = PI  # Ángulo de rotación objetivo (180 grados en radianes)

var current_rotation = 0.0

var rotation_speed = 0.3  # Ajusta esta variable para cambiar la velocidad de rotación


func _process(delta: float) -> void:

if current_rotation < target_rotation:

rotate_y(delta * rotation_speed)

current_rotation += delta * rotation_speed

if current_rotation >= target_rotation:

current_rotation = target_rotation

else:

rotation.y = target_rotation


Ejemplo de una rotacion de 180 grados mediante GDScript;

 extends Camera3D


var target_rotation = PI  # Ángulo de rotación objetivo (180 grados en radianes)

var current_rotation = 0.0


func _process(delta: float) -> void:

if current_rotation < target_rotation:

rotate_y(delta * PI)

current_rotation += delta * PI

if current_rotation >= target_rotation:

current_rotation = target_rotation

else:

rotation.y = target_rotation

sábado, 26 de octubre de 2024

GDScript ejemplo de codigo de animacion, al presionar "s" se para animacion al presionar "w" reanura animacion;

 extends Node3D


var animation_speed = 1.0

var animation_playing = true


func _ready():

$AnimationPlayer.play("MakeHuman default skeleton|CAMINANTE")


func _process(delta):

# Control de la velocidad de la animación

if Input.is_action_pressed("andaradelante"):

animation_speed = 2.0

animation_playing = true  # Asegurarse de que la animación esté en reproducción

$AnimationPlayer.play()

else:

animation_speed = 1.0


# Detener la animación al presionar "S"

if Input.is_action_just_pressed("detenerse"):

animation_playing = false

$AnimationPlayer.stop()


GDScript ejemplo de codigo de animacion; al presionar "s" se para la animacion;

extends Node3D

var animation_speed = 1.0
var animation_playing = true

func _ready():
$AnimationPlayer.play("MakeHuman default skeleton|CAMINANTE")

func _process(delta):
# Control de la velocidad de la animación
if Input.is_action_pressed("andaradelante"):
animation_speed = 2.0
else:
animation_speed = 1.0

# Detener o reanudar la animación
if Input.is_action_just_pressed("detenerse"):
animation_playing = not animation_playing
if animation_playing:
$AnimationPlayer.play()
$AnimationPlayer.speed = animation_speed
else:
$AnimationPlayer.stop()

miércoles, 23 de octubre de 2024

martes, 15 de octubre de 2024

GDScript para manipular textos de titulos de videojuego en Godot 4.3 3d; dos ejemplos;

 extends Label



# 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:

if Input.is_action_just_pressed("escapedesalir"):

#rotation_degrees += 180

scale.x = 0

scale.y = 0

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

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

Este GDScript de arriba solo escala el texto asta 0 lo hace desaparecer de pantalla.

En el texto solo dice: VER INTRUCIONES "ESC" SALIR INSTRUCCIONES "ESC"

Este texto sale nada mas empezar el juego........... paso al segundo GDScript.........

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

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

extends Label



# 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:

if Input.is_action_just_pressed("escapedesalir"):

rotation_degrees += 180




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

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

Este GDScript solamente  rota el texto 180 grados y dice:  

      MOVER NIÑO -"W"-"A"-"S"-"D" --SALTAR "ESPACIO"- "BOTON DEL RATON IZQUIERDO"-¡¡NIÑO MUERDE!!  Y GIRA IZQUIERDA CAMARA ,"BOTON DERECHO"¡¡NIÑO 

       MUERDE!!  Y  GIRA DERECHA CAMARA ,


         "RUEDA DEL RATON"  HACERCA ALEJA CAMARA.

         MOVER LA CAMARA -

        "U"-IZQUIERDA

         "I"DERECHA-

         " J"-ADELANTE-

         "K"-ATRAS-

          INCLINACION DE CAMARA-"O"-"P"

VER INTRUCIONES "ESC" SALIR INSTRUCCIONES "ESC"


Si te fijas veras que estas constantemente abisado para poder ver las instrucciones sin que te moleste el texto en pantalla, y poder jugar con toda la pantalla libre






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.......