@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....
No hay comentarios:
Publicar un comentario