miércoles, 23 de julio de 2025

GDScript para godot4.4 desde un Area3d cullo padre es un CharacterBody3D2 y persigue a un Player, destruye por colision ambos;

 extends Area3D


# Asegúrate de que estas rutas sean EXACTAMENTE correctas.

# Si el nombre del archivo tiene un espacio o un carácter especial, Godot lo necesita así.

var Esferauno = preload("res://POLICIA LIMPIO-3- AMPLIO ANIMACIONES/POLICIA  NOKEADO.tscn") # ¡Revisa esta línea!

var Esferauno1 = preload("res://DIENTES Y SANGRE BOLANDO/area_3d_diente.tscn")


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

func _ready() -> void:

pass


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

func _process(delta: float) -> void:

pass


func _on_area_entered(area: Area3D) -> void:

var parent = get_parent()


if parent and parent is CharacterBody3D:

parent.queue_free()


var collision_shape_cubo = parent.get_node_or_null("CollisionShape3D")

if collision_shape_cubo:

collision_shape_cubo.queue_free()


get_node("CollisionShape3D").queue_free()


# Si deseas que esta Area3D también se borre, descomenta la siguiente línea

# queue_free()


pass


func _on_area_exited(area: Area3D) -> void:

# Asegúrate de que no estás usando 'var' aquí, ya que Esferauno ya está declarado globalmente.

var Esferauno_instancia = Esferauno.instantiate()

add_child(Esferauno_instancia)


var Esferauno1_instancia = Esferauno1.instantiate()

add_child(Esferauno1_instancia)


pass




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

ESTE DE LA PARTE INFERIOR ES EL PERFECTO INSTANCIA AL ENEMIGO DERRIBADO TAMBIEN Y DESPEJA COMPLETAMENTE DE RESTOS EL ESCENARIO

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

extends Area3D


var Esferauno = preload("res://POLICIA LIMPIO-3- AMPLIO ANIMACIONES/POLICIA  NOKEADO.tscn")

var Esferauno1 = preload("res://DIENTES Y SANGRE BOLANDO/area_3d_diente.tscn")


func _ready() -> void:

pass


func _process(delta: float) -> void:

pass


func _on_area_entered(area: Area3D) -> void:

var parent = get_parent() # Obtiene una referencia al nodo padre


if parent and parent is CharacterBody3D:

var parent_global_transform = parent.global_transform # Guarda la transformación global del padre


# Instancia la escena de "POLICIA NOKEADO"

var policia_nokeado_instancia = Esferauno.instantiate()

get_tree().root.add_child(policia_nokeado_instancia) # Añade la instancia a la raíz del árbol de escena

policia_nokeado_instancia.global_transform = parent_global_transform # Establece su posición a la del padre borrado


parent.queue_free() # Borra el nodo padre (CharacterBody3D)


var collision_shape_cubo = parent.get_node_or_null("CollisionShape3D")

if collision_shape_cubo:

collision_shape_cubo.queue_free()


get_node("CollisionShape3D").queue_free()


# Si deseas que esta Area3D también se borre, descomenta la siguiente línea

# queue_free()


pass


func _on_area_exited(area: Area3D) -> void:

# Ahora, Esferauno (POLICIA NOKEADO) ya no se instanciará aquí.

# Si Esferauno1 (DIENTES Y SANGRE) debe seguir apareciendo al salir, déjalo aquí.

var Esferauno1_instancia = Esferauno1.instantiate()

add_child(Esferauno1_instancia) # Puedes decidir si quieres que esto sea hijo de esta Area3D o de la raíz.


pass


martes, 22 de julio de 2025

rock-and-roll-in-prison;

 


domingo, 20 de julio de 2025

Borrar por tiempo y animar , sin temporizador,GDScript Godot 4.4;

 extends Node3D


@export var tiempo_para_borrar: float = 5.0 # Tiempo en segundos antes de que el nodo se borre


func _ready() -> void:

$AnimationPlayer.play("mixamo_com")

# Creamos un nuevo nodo Timer

var temporizador = Timer.new()

add_child(temporizador) # Añadimos el temporizador como hijo

temporizador.wait_time = tiempo_para_borrar # Establecemos el tiempo de espera

temporizador.one_shot = true # Aseguramos que el temporizador se ejecute solo una vez

temporizador.start() # Iniciamos el temporizador

# Esperamos a que el temporizador termine

await temporizador.timeout

# Una vez que el temporizador ha terminado, borramos el nodo

queue_free()

jueves, 17 de julio de 2025

GDScript Godot 4.4 abrir puertas en eje "x" de lado a alado no en eje "y" de arriba abajo;

 extends Area3D


@export var velocidad_subida: float = 3.3

@export var velocidad_bajada: float = 3.3  # Cambié el nombre para mayor claridad

@export var altura_maxima: float = 1.0  # Altura máxima que subirá el objeto

@export var altura_inicial: float = 0.0 # Altura inicial del objeto


var objeto: Node3D  # Variable para almacenar el nodo CSGBox3D7

var subiendo: bool = false

var bajando: bool = false

var altura_actual: float = 0.0


@onready var sonido_puerta = $AudioStreamPlayer3D # ¡Añade esta línea! Asegúrate de que el nodo AudioStreamPlayer3D se llame 'AudioStreamPlayer3D' o ajusta el nombre si lo cambiaste.


func _ready():

#objeto = $CSGBox3D7  # Asignamos el nodo a la variable

objeto = $"CSGBox3D6 PUERTACARCEL"  # Asignamos el nodo a la variable

altura_actual = objeto.position.x # Obtiene la altura inicial del objeto

altura_inicial = altura_actual # guarda la altura inicial


func _physics_process(delta):

if objeto:  # Verifica si el objeto existe

if subiendo:

altura_actual += velocidad_subida * delta

altura_actual = min(altura_actual, altura_inicial + altura_maxima) # Limita la altura máxima

objeto.position.x = altura_actual

if altura_actual >= altura_inicial + altura_maxima:

subiendo = false  # Detiene la subida al alcanzar la altura máxima

elif bajando:

altura_actual -= velocidad_bajada * delta

altura_actual = max(altura_actual, altura_inicial)  # Limita la altura mínima

objeto.position.x = altura_actual

if altura_actual <= altura_inicial:

bajando = false  # Detiene la bajada al alcanzar la altura inicial


func _on_area_entered(area: Area3D) -> void:

subiendo = true

bajando = false

# ¡Añade esta línea para reproducir el sonido!

if sonido_puerta and not sonido_puerta.playing: # Verifica que el nodo existe y no está sonando ya

sonido_puerta.play()


func _on_area_exited(area: Area3D) -> void:

subiendo = false

bajando = true

# Puedes añadir un sonido diferente para cuando la puerta baja aquí si lo deseas

# Por ejemplo:

# if sonido_puerta and sonido_puerta.playing: # O puedes usar otro AudioStreamPlayer3D para el sonido de bajada

#     sonido_puerta.stop() # Detiene el sonido si aún está sonando al salir

domingo, 13 de julio de 2025

Un MeshInstance3D gira con alternancias sobre si mismo, GDScript para Godot 4.4;

 extends MeshInstance3D


@export var rotation_speed_min := 0.5

@export var rotation_speed_max := 2.0

@export var rotation_change_interval := 2.0


var current_rotation_speed := 0.0

var time_since_last_change := 0.0

var current_axis := Vector3.ZERO


func _ready():

_set_new_rotation_parameters()


func _process(delta):

time_since_last_change += delta

if time_since_last_change >= rotation_change_interval:

_set_new_rotation_parameters()

time_since_last_change = 0.0


# Apply rotation

rotate_object_local(current_axis, current_rotation_speed * delta)


func _set_new_rotation_parameters():

# Randomize rotation speed

current_rotation_speed = randf_range(rotation_speed_min, rotation_speed_max)


# Randomize rotation axis

var random_x = randf_range(-1.0, 1.0)

var random_y = randf_range(-1.0, 1.0)

var random_z = randf_range(-1.0, 1.0)

current_axis = Vector3(random_x, random_y, random_z).normalized()

Conclusiones sobre aprovechar animaciones de mixamo para proyectos para Godot 4.4.;

 

Conclusiones sobre aprovechar animaciones de mixamo para proyectos para Godot 4.4.


1- Hay que cambiar el cuerpo que usa mixamo, el que tiene mixamo pegado al esqueleto de sus animaciones.


2- Desde Blender hay que borrar el cuerpo que viene pegado a los huesos, el que nos viene desde mixamo, luego hay que importar un cuerpo nuevo, en mi caso desde makehuman, mas adelante puede retocarse modelarse con blender,


3-El esqueleto no encajara en el nuevo cuerpo, a mi me da buen resultado deformar los huesos y adaptarlos al nuevo cuerpo, funciona, luego hay que fusionar ese esqueleto al cuerpo nuevo echo por nosotros.


4- Las animaciones me causaron problemas de que se meten dentro del cuerpo del personaje de forma extraña, no hay problema¡¡¡


5-El personaje echo por nosotros y fusionado con el esqueleto que nosotros emos retocado su tamaño para que encaje con el nuevo modelo , lo volvemos a subir a mixamo, desde mixamo lo retocamos con la opccion Character Arm-Space que hace que los huesos en movimiento se separen del cuerpo de forma controlada y ya esta¡¡¡


6- Descargamos de mixamo nuestro modelo trabajado por nosotros y manipulado por mixamo y todo fantástico¡¡¡¡ resuelto¡¡¡¡



miércoles, 9 de julio de 2025

Sobre el esfuerzo de desarrollar videojuegos¡¡¡¡¡¡¡............;

 Sobre el esfuerzo de desarrollar videojuegos¡¡¡¡¡¡¡............;

Es laborioso, realmente es todo trabajo, no es jugar, bueno, tambien es jugar, pero que detras hay esfuerzo,, no sale solo.


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

OPINION DE LA IA:




¡Así es, lo has captado perfectamente! Lo que describes es la esencia del desarrollo de videojuegos. A menudo, la gente ve el resultado final, el juego funcionando, y no se da cuenta de todo el esfuerzo, la paciencia y el trabajo que hay detrás.


La Dualidad del Desarrollo: Trabajo y Juego

Es una mezcla fascinante de:

  • Trabajo intenso: Horas de código, depuración, ajuste de números, diseño, pruebas y sí, esos momentos de "prueba y error" que mencionabas con el colisionador. Es un proceso metódico que requiere disciplina y perseverancia.

  • Creatividad y juego: Pero a la vez, es un tipo de trabajo que te permite ser increíblemente creativo. Cada ajuste que haces, cada problema que resuelves para que algo "se sienta bien", es una pequeña victoria que alimenta esa chispa. Es "jugar" en el sentido de experimentar, de dar forma a una idea, de ver cómo algo que solo existía en tu mente cobra vida.

Es como construir un castillo de arena: parece un juego, pero requiere saber cuándo añadir agua, cuándo compactar, cómo dar forma para que no se caiga. No sale solo; hay un esfuerzo consciente en cada paso.

Tu experiencia resalta lo gratificante que es cuando, después de todo ese trabajo, logras que el sonido, la animación y la interacción se sincronicen perfectamente. ¡Esa sensación de "lo he conseguido" es el verdadero premio!