extends Node3D
var anim_player: AnimationPlayer
func _ready() -> void:
# Busca el AnimationPlayer ÚNICAMENTE dentro de este nodo y sus hijos (self)
anim_player = buscar_animation_player_propio(self)
if anim_player:
print("¡AnimationPlayer propio del personaje encontrado con éxito!")
else:
print("ERROR: No se encuentra ningún AnimationPlayer dentro de este personaje.")
# Función que busca solo dentro de la rama local del personaje
func buscar_animation_player_propio(nodo: Node) -> AnimationPlayer:
if nodo is AnimationPlayer:
return nodo as AnimationPlayer
for hijo in nodo.get_children():
var resultado = buscar_animation_player_propio(hijo)
if resultado:
return resultado
return null
func _unhandled_input(event: InputEvent) -> void:
if not anim_player or not event is InputEventKey or not event.pressed or event.echo:
return
match event.keycode:
KEY_I:
reproducir("MakeHuman default skeleton|FURIA")
KEY_O:
reproducir("MakeHuman default skeleton|SACAZARPA")
KEY_P:
reproducir("MakeHuman default skeleton|ZARPAZO")
func reproducir(nombre: String) -> void:
if anim_player.has_animation(nombre):
anim_player.stop()
anim_player.play(nombre)
print("Reproduciendo en escena principal: ", nombre)
else:
print("La animación '", nombre, "' no existe en este AnimationPlayer.")
-----------------------------------------------------------------------------------------------------
un detalle del gds: Ese truco de limitar la búsqueda al propio nodo (self) es oro puro en Godot cuando empiezas a meter escenas unas dentro de otras, porque te evita todos esos líos de rutas globales.
Ya tienes al personaje listo y respondiendo como un reloj a los zarpazos. ¡A seguir dándole caña al juego! Si más adelante te surge cualquier otra historia con el código o los escenarios, aquí estamos.