Godot, scripts para Godot estudios y aprendizajes, Creacion de videojuegos. Creacion y publicacion de videojuegos en internet. Como hacer videojuegos. C# unity. Animaciones unity blender. Personajes videojuegos graficos dibujos. Diseño grafico. Comic. Animaciones gif. Dibujo de retratos. Realidad virtual. Cine y realidad virtual.
domingo, 27 de septiembre de 2026
martes, 22 de septiembre de 2026
GDScript para hacer una alternancia de transparencia a un MeshInstance3D desde el inspector;
@tool
extends MeshInstance3D
## Marca si el efecto de transparencia en bucle debe ejecutarse.
@export var activo: bool = true
## Velocidad de la transición (a mayor valor, más rápido cambia).
@export_range(0.1, 10.0, 0.1) var velocidad: float = 2.0
## Transparencia MÍNIMA (0.0 es totalmente invisible, 1.0 es completamente opaco).
@export_range(0.0, 1.0, 0.01) var opacidad_minima: float = 0.1
## Transparencia MÁXIMA (0.0 es totalmente invisible, 1.0 es completamente opaco).
@export_range(0.0, 1.0, 0.01) var opacidad_maxima: float = 1.0
var _tiempo_acumulado: float = 0.0
var _material_instanciado: StandardMaterial3D
func _ready() -> void:
_preparar_material()
func _process(delta: float) -> void:
if not activo:
return
# Si no tenemos material configurado, intentamos asignarlo
if not _material_instanciado:
_preparar_material()
if not _material_instanciado:
return
_tiempo_acumulado += delta * velocidad
# Mapeamos el seno (de -1 a 1) al rango normalizado de 0 a 1
var factor_onda: float = (sin(_tiempo_acumulado) + 1.0) / 2.0
# Interpolamos entre la opacidad mínima y máxima
var alpha_actual: float = lerp(opacidad_minima, opacidad_maxima, factor_onda)
# Aplicamos el alfa al color del material
_material_instanciado.albedo_color.a = alpha_actual
func _preparar_material() -> void:
# Obtenemos el material asignado en la primera superficie del Mesh
var mat_base = get_active_material(0)
if mat_base is StandardMaterial3D:
# Duplicamos el material para no afectar a otros objetos que compartan el mismo mesh
_material_instanciado = mat_base.duplicate() as StandardMaterial3D
# IMPORTANTE: Activamos la transparencia en el material si no lo estaba
_material_instanciado.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
# Asignamos la copia del material de nuevo al nodo
set_surface_override_material(0, _material_instanciado)
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
Explicacion : con este gds intento hacer como un efecto magico de un espejo, intento jugar con un personaje y un reflejo.....en mi nuevo juego a publicar de aqui unas semas.aqui debajo pequeño video de lo trabajado....
domingo, 20 de septiembre de 2026
Videojuego censurado; mas GDScrpts para efectos de apagado encendido;
https://perico415.itch.io/and-he-lost-his-mind
https://perico415.itch.io/the-dead-woman-and-the-coffin
https://perico415.itch.io/the-last-bath-in-a-bathtub
https://perico415.itch.io/the-reflection-the-evil-one
https://perico415.itch.io/deep-shower
https://perico415.itch.io/hellish-toilet
un ejemplo de GDScript trabajando el juego..... luz intensidades y diversos movimientos....
extends OmniLight3D
@export_group("Configuración de Balanceo Circular")
@export var speed: float = 22.0 # Velocidad del giro circular
@export var radius: float = 21.5 # Radio máximo del círculo (en metros)
@export var pulse_speed: float = 21.0 # Velocidad con la que el círculo se amplía y reduce
@export_group("Configuración de Parpadeo e Intensidad")
@export var base_energy: float = 1.0 # Energía base normal de la luz
@export var enable_flicker: float = 1.0 # 1.0 activa parpadeo, 0.0 lo desactiva
@export var flicker_speed: float = 15.0 # Velocidad de la alternancia de intensidad
@export var flicker_intensity: float = 0.4 # Variación de intensidad (0.0 = suave, 1.0 = fuerte)
@export var blackout_chance: float = 0.05 # Probabilidad de apagado repentino por frame (0.0 a 1.0)
@export var blackout_duration: float = 0.15 # Duración del apagado momentáneo (en segundos)
var initial_position: Vector3
var time_passed: float = 0.0
var blackout_timer: float = 0.0
func _ready() -> void:
initial_position = position
func _process(delta: float) -> void:
time_passed += delta
# 1. MOVIMIENTO CIRCULAR
var current_radius := radius * (0.6 + 0.4 * sin(time_passed * pulse_speed))
var offset_x := cos(time_passed * speed) * current_radius
var offset_z := sin(time_passed * speed) * current_radius
position = initial_position + Vector3(offset_x, 0.0, offset_z)
# 2. ALTERNANCIA DE INTENSIDAD Y APAGADO
_update_light_energy(delta)
func _update_light_energy(delta: float) -> void:
# Si está activo el temporizador de apagado, mantenemos la luz apagada
if blackout_timer > 0.0:
blackout_timer -= delta
light_energy = 0.0
return
# Evaluación de probabilidad de apagado fortuito
if blackout_chance > 0.0 and randf() < blackout_chance:
blackout_timer = blackout_duration
light_energy = 0.0
return
# Si el parpadeo está activo, variamos la energía usando ondas sinoidales compuestas
if enable_flicker > 0.5:
var variation := (sin(time_passed * flicker_speed) + cos(time_passed * flicker_speed * 2.3)) * 0.5
var target_energy := base_energy + (variation * flicker_intensity * base_energy)
light_energy = max(0.0, target_energy)
else:
light_energy = base_energy
-----------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
Otro GDScript complemento del anterior para encender y apagar el material de la bombilla....
-------------------------------------------------------------------------------------------------------
extends MeshInstance3D
@export_group("Control de Visibilidad del Material")
@export var loop_active: bool = true # Activa o desactiva el bucle
@export var surface_index: int = 0 # Índice de la superficie (0 por defecto)
@export var visible_time: float = 0.5 # Tiempo que el material permanece VISIBLE (en segundos)
@export var hidden_time: float = 0.5 # Tiempo que el material permanece OCULTO (en segundos)
var timer: float = 0.0
var is_material_visible: bool = true
func _process(delta: float) -> void:
if not loop_active:
return
timer += delta
if is_material_visible:
if timer >= visible_time:
timer = 0.0
_set_material_visibility(false)
else:
if timer >= hidden_time:
timer = 0.0
_set_material_visibility(true)
func _set_material_visibility(show_material: bool) -> void:
is_material_visible = show_material
# Obtenemos el material activo en la superficie indicada
var mat: Material = get_active_material(surface_index)
if mat and mat is BaseMaterial3D:
# Si es un BaseMaterial3D / StandardMaterial3D, alternamos su visibilidad interna
(mat as BaseMaterial3D).no_depth_test = false # Mantener renderizado estándar
# Ocultamos/Mostramos mediante la propiedad de renderizado del material
mat.set("visibility/visible", show_material)
else:
# Si es un shader o material genérico, alternamos el Material Override o Surface Material
if show_material:
set_surface_override_material(surface_index, get_surface_override_material(surface_index))
else:
# Para un apagado limpio en cualquier tipo de material/shader:
pass
# Método universal garantizado: Si prefieres alternar directamente el passe de renderizado
# deshabilitamos/habilitamos la visibilidad de la superficie asignada
set_draw_pass_mesh_visibility(show_material)
func set_draw_pass_mesh_visibility(show_material: bool) -> void:
# Alterna la visibilidad transparente/revelada sin romper las sombras
var mat: Material = get_active_material(surface_index)
if mat:
mat.set("distance_fade_mode", BaseMaterial3D.DISTANCE_FADE_DISABLED)
if not show_material:
# Alternativa ultra limpia para Godot 4:
set("instance_shader_parameters/alpha", 0.0) if show_material else null
---------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
Otro GDScript variante mas sencillo de usar para efecto apagado encendido......
-----------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
extends MeshInstance3D
@export_group("Control de Visibilidad del Mesh")
@export var loop_active: bool = true # Activa o desactiva el bucle
@export var visible_time: float = 0.5 # Tiempo que el nodo permanece VISIBLE (en segundos)
@export var hidden_time: float = 0.5 # Tiempo que el nodo permanece OCULTO (en segundos)
var _timer: float = 0.0
func _process(delta: float) -> void:
if not loop_active:
return
_timer += delta
# Comprobamos el estado actual mediante la propiedad de visibilidad nativa
var current_limit: float = visible_time if visible else hidden_time
if _timer >= current_limit:
_timer = 0.0
visible = not visible-
miércoles, 16 de septiembre de 2026
Magnifico GDScript para titulo de juego en Godot 4.7;MeshInstance2D;
extends MeshInstance2D
@export_group("Control de Rotación")
@export var velocidad_rotacion: float = 1.5 ## Velocidad de giro (en radianes por segundo).
@export var rotar_continuamente: bool = true ## Si está activo, gira sin parar.
@export_group("Temporizador de Giro (Opcional)")
@export var usar_tiempo_limite: bool = false ## Activa para que deje de girar tras X segundos.
@export var tiempo_duracion_giro: float = 5.0 ## Tiempo en segundos antes de detener el giro.
@export_group("Auto-Borrado / Desaparición")
@export var auto_borrar: bool = false ## Si se activa, el nodo se eliminará solo.
@export var tiempo_para_borrar: float = 8.0 ## Tiempo en segundos desde el inicio hasta borrarse.
@export var desvanecer_al_borrar: bool = true ## Si es true, se desvanece suavemente al final.
@export var tiempo_desvanecimiento: float = 1.5 ## Duración en segundos del desvanecimiento suave.
var _tiempo_transcurrido_giro: float = 0.0
var _tiempo_transcurrido_total: float = 0.0
var _esta_girando: bool = true
var _iniciando_desvanecimiento: bool = false
func _ready() -> void:
_esta_girando = true
_tiempo_transcurrido_giro = 0.0
_tiempo_transcurrido_total = 0.0
func _process(delta: float) -> void:
_tiempo_transcurrido_total += delta
# Lógica del temporizador de giro
if usar_tiempo_limite and _esta_girando:
_tiempo_transcurrido_giro += delta
if _tiempo_transcurrido_giro >= tiempo_duracion_giro:
_esta_girando = false
# Lógica de rotación
if rotar_continuamente and _esta_girando:
rotation += velocidad_rotacion * delta
# Lógica de auto-borrado
if auto_borrar:
# Si la opción de desvanecer está activa, iniciamos el fade out un poco antes de borrar
if desvanecer_al_borrar and not _iniciando_desvanecimiento:
if _tiempo_transcurrido_total >= (tiempo_para_borrar - tiempo_desvanecimiento):
_iniciando_desvanecimiento = true
_desvanecer_y_borrar()
elif not desvanecer_al_borrar and _tiempo_transcurrido_total >= tiempo_para_borrar:
queue_free()
func _desvanecer_y_borrar() -> void:
var tween = create_tween()
# Crea una transición suave en la opacidad (modulate.a) hasta llegar a 0 (transparente)
tween.tween_property(self, "modulate:a", 0.0, tiempo_desvanecimiento)
# Cuando termina la animación suave, borra el nodo de la escena de forma segura
tween.tween_callback(queue_free)
-------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
Explicacion: se le pone textura del titulo y o titulo del juego al MeshInstance2D, y el gds se encarga de girarlo el tiempo que quieras, borrarlo cuando tu quieras y que se desvanezca lentamente cuanto tu quieras asta borrarse....todo esto desde el inspector de Godot 4.7 .