filmAnimaciones Spine

Puedes añadir objetos animados e interactivos a tu juego usando nuestra biblioteca existente de más de 50k rigs de Spine.

Spine es cómo funcionan los personajes animados y los props en All Out (cajas, animales, props, rigs de VFX y el jugador).

Para que Spine resulte más sencillo, mantén este modelo mental:

  • Rig de Spine (.spine): el “plano” (huesos + nombres de animación + nombres de skin)

  • Spine_Animator: un componente en una entidad que renderiza/actualiza un rig de Spine en el mundo

  • Spine_Instance: la instancia subyacente que controlas en código (reproducir animaciones, cambiar skins, etc.)

  • Skins: “atuendos/variantes” que deciden qué imágenes son visibles

  • Animaciones: líneas de tiempo nombradas (p. ej. "idle", "walk", "open")

Cuándo usar Spine_Animator vs Spine_Instance

  • Usa Spine_Animator para cualquier cosa que exista en el mundo (props, NPCs, objetos interactuables).

  • Usa Spine_Instance directamente cuando quieras dibujar un Spine en la IU o necesites control manual del tiempo de vida.

circle-exclamation

Referencia de la API de Spine (CSL)

Spine_Animator :: class : Component {
    depth_offset: float;
    layer: s32;
    instance: Spine_Instance #read_only;
}

Spine_Instance :: class {
    create  :: proc() -> Spine_Instance;
    destroy :: method();
    update  :: method(dt: float);

    set_skeleton :: method(asset: Spine_Asset);
    get_skeleton :: method() -> Spine_Asset;

    set_animation :: method(animation: string, loop: bool, track: s64, speed: float = 1);

    // Skins
    set_skin          :: method(skin: string);
    enable_skin       :: method(skin: string);
    disable_skin      :: method(skin: string);
    disable_all_skins :: method();
    refresh_skins     :: method();
    get_skins         :: method() -> []string;

    // Desplazamientos locales de huesos (avanzado)
    get_bone_local_position :: method(bone_name: string) -> v2;
    set_bone_local_position :: method(bone_name: string, position: v2);

    // Opcional: controlar animaciones mediante una máquina de estados
    set_state_machine :: method(new_state_machine: State_Machine, transfer_ownership: bool);

    // Visuales
    color_multiplier: v4;
    set_color_replace_color :: method(color: Color_Replace_Color);
}

Agregar objetos animados a tu mundo

Hay 3 formas de agregar objetos animados a tu escena, todas las cuales crearán un componente Spine_Animator.

  • Arrastra cualquier asset animado desde el Catálogo de Activosa tu escena

  • Crea una nueva entidad y agrega el componente Spine_Animator

    • Configura el Asset de datos del esqueleto al campo a un archivo .spine en tus assets

  • Agrega un animador de spine a tu mundo usando scripting (se cubre en los ejemplos)

circle-info

Si tu código y el Spine_Animator están en la misma entidad y comienzan al mismo tiempo, llama spine->awaken() antes de acceder a spine.instance.

Ejemplos

Cofre que se puede abrir

Un cofres interactuable que reproduce una animación de “abrir” y luego se queda abierto:

Pollo caminando

Un bucle simple de “idle vs walk” basado en el movimiento:

Coche manejable

Si quieres comportamiento “manejable”, el enfoque más simple es conducir el movimiento con tu propia lógica de juego, y controlar la animación basada en si el coche se está moviendo.

circle-info

Si estás cambiando entre solo dos animaciones en bucle, las llamadas directas a set_animation suelen ser más simples que construir una máquina de estados.

Skins (variantes/atuendos)

Algunos spines no comienzan con una skin predeterminada. Si tu entidad está “invisible”, probablemente necesites escoger una skin.

circle-exclamation

Máquinas de estados (opcionales, para lógica de animación compleja)

Puedes mantener la lógica de animación simple llamando a set_animation directamente. Si tienes muchos estados (idle/run/attack/hit/death), una State_Machine te ayuda a definir transiciones una vez y luego solo establecer variables/disparadores.

La idea clave: los nombres de los estados deben coincidir con los nombres de las animaciones en tu archivo Spine.

Qué hace una máquina de estados

Piensa en una máquina de estados como un pequeño “controlador de animación”:

  • Defines estados (cada nombre de estado debe coincidir con un nombre de animación de Spine)

  • Defines variables (bool, disparador, int, float)

  • Defines transiciones entre estados basadas en esas variables

  • En tiempo de ejecución, solo actualizas variables (la máquina de estados elige la animación)

Ejemplo mínimo: idle/walk + disparador de ataque

circle-info

Si pasas transfer_ownership = true a set_state_machine, el Spine_Instance destruirá la máquina de estados por ti. De lo contrario, debes destruirla tú mismo.

Solución de problemas

P: Arrastré un asset de spine a mi escena y no veo ningún objeto, es solo una entidad vacía

R: Asegúrate de hacer clic en "Add Skin" y seleccionar una variante del spine para aplicar. Algunos spines no comienzan con una skin predeterminada.

P: Mi script se bloquea cuando accedo a spine.instance

R: Si tu script y el Spine_Animator comienzan al mismo tiempo, llama spine->awaken() antes de usar spine.instance.

P: Cambié skins pero no pasó nada

R: Después de cualquier cambio de skin (set_skin, enable_skin, disable_skin, disable_all_skins), debes llamar refresh_skins().

Skins/Animaciones personalizadas del jugador

Si quieres añadir animaciones personalizadas a tu jugador, puedes hacerlo combinando el rig base del jugador de All Out con un rig personalizado que contenga más animaciones (podemos proporcionar muchos de estos, solo contáctanosSoporte para Desarrolladores)

El formato del rig de Spine

Los rigs de Spine están formados por 3 archivos (descargados automáticamente cuando usas el Catálogo de Assets)

  • El archivo del esqueleto (.spine) proporciona información sobre los huesos, skins y la estructura de tu objeto animado.

  • La imagen del atlas (.png) contiene las texturas reales usadas para dibujar el spine en el mundo.

  • El archivo del atlas (.atlas) proporciona información sobre dónde dentro de la imagen atlas .png se encuentra cada parte del objeto animado.

Crear tus propias animaciones

circle-exclamation

Formato de exportación

Para usar un rig de Spine personalizado en All Out, necesitas exportar el paquete estándar de 3 archivos de Spine dentro de tu res carpeta:

  • algo.spine

  • algo.atlas

  • algo.png (textura del atlas)

Si no estás seguro sobre los ajustes de exportación, comienza a partir de un asset de Spine existente de All Out del Catálogo de Assets y replica su estructura o contáctanos.

Última actualización