Communitygithub.com

animación-roblox

Diseña, previsualiza y exporta animaciones de personajes Roblox para avatares R6 y R15. Transforma un movimiento descrito en una previsualización 3D interactiva con storyboard y genera keyframes horneados como KeyframeSequence (.rbxmx y script de barra de comandos).

¿Qué es animación-roblox?

Esta habilidad permite crear y refinar animaciones para personajes Roblox, tanto para rigs R6 como R15. El usuario describe un movimiento (como un puñetazo, una patada de fútbol, un salto o una danza) y la habilidad lo traduce a una especificación JSON de poses clave. Luego, un motor local (basado en Node.js) calcula la cinemática de las articulaciones de Roblox, interpola las poses y genera una previsualización 3D interactiva (HTML + storyboard PNG) que se puede examinar y corregir iterativamente. Finalmente, exporta los keyframes horneados como un archivo `.rbxmx` y un script `.lua` para la barra de comandos de Roblox Studio. Soporta marcadores de eventos (como "Hit" o "BallRelease") y props interactivos (pelotas, espadas) para validar visualmente la interacción. Es útil para cualquier desarrollador que quiera crear animaciones personalizadas para Roblox sin necesidad de un editor de animaciones complejo, permitiendo un ciclo rápido de diseño, revisión y ajuste.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ridhotamma/roblox-developer-skills/tree/HEAD/skills/roblox-animation

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Animación Roblox (R6 / R15)

Crear un movimiento como una pequeña especificación de movimiento en JSON: un puñado de poses clave escritas en términos anatómicos ("brazo superior derecho 90° hacia adelante", "rodilla doblada 60°"). El motor incluido hace todo lo que es propenso a errores a mano: matemáticas de las articulaciones Roblox para ambos rigs, interpolación, mantener los pies en el suelo, un visor 3D, advertencias de cordura y la exportación de keyframes horneados.

El usuario juzga el resultado viéndolo, así que el bucle es: planificar las fases → escribir la especificación → construir → mirar el storyboard tú mismo → corregir → entregar vista previa + keyframes. No omitas el paso de mirar; los números de pose que parecen correctos en papel a menudo son visiblemente incorrectos (un brazo a través del pecho, una patada que nunca alcanza el balón).

Flujo de trabajo

  1. Fijar el movimiento. Rig (R6 o R15; pregunta solo si realmente no se puede inferir, de lo contrario predetermina R15 y dilo), lateralidad, bucle o de un solo disparo, duración aproximada y qué ganchos de juego se necesitan (fotograma de golpe, lanzamiento de balón, pasos de pies). Empieza a construir directamente para una solicitud clara.
  2. Dividir en fases antes de escribir números. Casi cualquier acción es: preparación → anticipación → acción → seguimiento → recuperación. Lee references/motion-cookbook.md para el género que estés haciendo (combate, deportes, bucles de locomoción, acrobacias, detalles específicos de R6); tiene tablas de tiempos y recetas de poses.
  3. Escribir la especificación en <nombre>.json. Empieza desde el archivo más cercano en examples/ en lugar de desde cero.
  4. Construir: node <skill>/scripts/ranim.cjs <nombre>.json --out out (se pueden pasar varias especificaciones; se convierten en pestañas en una vista previa). Solo necesita Node, sin paquetes.
  5. Leer el informe impreso en stdout. Enumera dónde están la cabeza, las manos y los pies en cada clave (studs: R = a la derecha del personaje, U = sobre el suelo, F = al frente) e imprime líneas WARN. Usa las posiciones para verificar la intención: ¿está realmente el puño frente al pecho, está el pie a la altura del balón?
  6. Mirar out/storyboard-<Nombre>.png con la herramienta Leer (cada clave desde una vista 3/4 y una vista lateral). Si no se produjo PNG, captura out/preview.html con un navegador sin interfaz gráfica o lee el SVG. Compara cada panel con la fase que pretendías.
  7. Corregir y reconstruir hasta que las poses se lean claramente y las advertencias hayan desaparecido o se acepten conscientemente. Son normales dos o tres rondas.
  8. Entregar: el out/preview.html interactivo (publícalo como artefacto o envía el archivo), más out/<Nombre>.rbxmx y out/<Nombre>.lua. Muestra la imagen del storyboard en línea si puedes. Explica al usuario brevemente cómo llevarlo a Studio (abajo) y qué eventos de animación existen.

Especificación de movimiento

{
  "name": "JabCross",            // se convierte en el nombre de KeyframeSequence y del archivo
  "title": "Combo jab-cross",    // se muestra en el visor
  "rig": "R15",                  // "R15" o "R6"
  "priority": "Action",          // Idle | Movement | Action | Action2..4 | Core
  "loop": false,
  "description": "Una o dos oraciones que se muestran junto a la vista previa.",
  "keys": [
    { "t": 0, "label": "guardia", "note": "Se muestra en la lista de fases.",
      "pose": { "UpperTorso": { "turnR": 10, "bendFwd": 8 },
                "LeftUpperArm": { "fwd": 50, "out": 8 }, "LeftLowerArm": { "bend": 120 },
                "LeftFoot": "flat" } },
    { "t": 0.1, "label": "jab", "ease": "out", "copy": "guardia",
      "pose": { "LeftUpperArm": { "fwd": 86, "in": 22 }, "LeftLowerArm": { "bend": 6 } } },
    { "t": 0.8, "label": "recuperación", "copy": "guardia" }
  ],
  "markers": [ { "t": 0.1, "name": "Hit", "value": "jab" } ],
  "props": [ { "type": "ball", "radius": 0.6, "color": "#e07a2c", "keys": [ ... ] } ]
}

(Los comentarios son solo para explicación; el archivo debe ser JSON plano.)

Campos opcionales de nivel superior: fps (por defecto 30; usa 60 para movimientos muy rápidos), duration (por defecto la última clave), grounding ("off" para controlar la altura manualmente), mirror: true (invierte todo el clip izquierda/derecha, por ejemplo, una versión zurda), endKeyframe: true.

Claves

  • t segundos (ajustado a un fotograma). La primera clave es en 0.
  • pose asigna nombre de articulación → canales en grados. Una articulación omitida en una clave simplemente se interpola a través de esa clave, por lo que las claves intermedias pueden mencionar solo las articulaciones que importan. Una articulación nunca mencionada permanece en reposo y no se exporta; una que se menciona por primera vez después de la clave 0 comienza desde el reposo (0°).
  • copy: la etiqueta o índice de una clave anterior. La pose comienza como una copia y pose sobrescribe partes de ella. "mirror": true con copy intercambia izquierda y derecha, así es como se hacen los ciclos de caminar/correr a partir de medio paso.
  • ease da forma al segmento que sale de esta clave: smooth (por defecto, alisa naturalmente sin sobrepaso), linear, in (comienza lento, termina rápido: cargas que se liberan en un golpe), out (comienza rápido, se asienta: impactos), inOut, hold, overshoot, anticipate, bounce, elastic.
  • lift: altura en studs del punto más bajo del cuerpo sobre el suelo en esta clave (por defecto 0). Así es como se hacen los saltos; ver Grounding.

Articulaciones y canales

Los ángulos son anatómicos y la misma palabra significa lo mismo en ambos lados del cuerpo, por lo que una pose reflejada no necesita cambios de signo. Cada canal tiene un alias de dirección opuesta; usa el que se lea de forma natural.

ArticulacionesCanales (alias para la dirección opuesta)
Raíz: LowerTorso (R15), Torso (R6)bendFwd (bendBack), turnL (turnR), leanR (leanL), moveFwd (moveBack), moveR (moveL), moveUp (moveDown) en studs
Columna: UpperTorso, HeadbendFwd (bendBack), turnL (turnR), leanR (leanL)
Extremidades superiores: Left/RightUpperArm, Left/RightUpperLeg; R6 Left Arm, Right Arm, Left Leg, Right Legfwd (back) balancea el miembro hacia adelante/arriba, out (in) alejándose del / cruzando el cuerpo, twistOut (twistIn) lo gira sobre su propia longitud
Left/RightLowerArm, Left/RightLowerLegbend: codos y rodillas en su dirección natural (0 = recto)
Left/RightHand, Left/RightFootfwd (back), out (in), twistOut (twistIn). Los pies también aceptan la cadena "flat"

Puntos de referencia: brazo fwd: 90 apunta recto hacia adelante, fwd: 180 recto hacia arriba, out: 90 es una pose en T. Pierna fwd: 90 es una patada frontal a la altura de la cintura. Las rotaciones se componen de padre a hijo, por lo que el giro del pecho lleva los brazos con él; gira la Head en la dirección opuesta para mantener los ojos en el objetivo.

R6 tiene seis partes y no tiene codos, rodillas, manos ni pies, por lo que la silueta proviene del torso y los ángulos de las extremidades completas; exagera un poco. Los nombres de las extremidades R6 contienen un espacio ("Right Arm").

Grounding

Por defecto, el motor baja o sube la raíz en cada fotograma para que el punto más bajo del cuerpo esté exactamente lift studs sobre el suelo. Consecuencias:

  • Las sentadillas, estocadas y splits bajan automáticamente las caderas; nunca ajustes manualmente la altura de la cadera para una pose de pie.
  • "flat" en un pie R15 resuelve el tobillo para que la planta quede plana independientemente de lo que haga la pierna. Úsalo para cada pie plantado; da ángulos explícitos ("back": 40 = dedos apuntando) para pies en el aire o de puntillas.
  • Un salto son valores lift en las claves aéreas (despegue pequeño, ápice más grande, 0 en el aterrizaje). La rotación del cuerpo en el aire va en la raíz: un backflip es el bendBack de la raíz que va de 0 a 360 a través de las claves (los ángulos son continuos, así que 360 es un giro completo, no "volver a 0").
  • moveUp en la raíz se ignora mientras el grounding está activado. Pon "grounding": "off" solo para cosas como nadar o escalar donde el suelo es irrelevante.
  • Los saltos y dashings en el juego normalmente los mueve el controlador del personaje, no la animación. Para una animación que se reproduce durante un salto de juego, posa el cuerpo y deja lift en 0. Usa lift y moveFwd para emotes independientes, ataques con un salto y volteretas. Si el clip termina desplazado de donde empezó, el informe advierte, porque Roblox devuelve el cuerpo a su lugar cuando la pista se detiene.

Marcadores y props

  • markers se convierten en KeyframeMarkers, que se leen en el juego con track:GetMarkerReachedSignal("Hit"). Pon uno en cada fotograma que importe para la jugabilidad: ventanas de golpe, contacto o lanzamiento de balón, pasos de pies, señales de sonido.
  • props son solo para vista previa (no se exportan) y existen para que el movimiento pueda juzgarse contra lo que interactúa. type: "ball" con radius, o cualquier otro tipo para una caja con size: [x, y, z] (una espada es una caja larga y delgada). at puede ser un nombre de parte (el prop sigue esa parte; offset: [right, up, fwd] en los ejes propios de la parte) o un punto fijo [right, up, fwd] en studs desde el punto del suelo debajo del personaje. Con varios keys, el prop se mueve entre anclajes; arc añade una subida parabólica al segmento que sale de esa clave (un tiro o un pase). Ver examples/jump_shot.json y examples/soccer_kick.json.

Cómo se ve un buen resultado

  • Siluetas legibles. En el storyboard, cada clave debe ser reconocible solo por su contorno. Si dos claves vecinas se parecen, una de ellas no está haciendo ningún trabajo.
  • Contraste en el tiempo. Anticipación lenta, acción muy rápida (2 a 4 fotogramas), una pausa breve en el seguimiento, recuperación más lenta. La separación uniforme entre claves es la razón más común por la que un movimiento se siente sin peso.
  • Todo el cuerpo participa. La potencia comienza en los pies y las caderas, luego el pecho, luego el hombro, luego la mano o el pie. Dale a las caderas y al pecho una contrarrotación en la carga y deja que el brazo lejano equilibre el cercano.
  • Los pies se quedan quietos. Un pie plantado mantiene sus números R y F en el informe de una clave a otra. Si debe moverse, levántalo en una clave intermedia (un paso).
  • Cero advertencias, o una razón para cada una que conserves. Los límites son rangos articulares naturales; excederlos generalmente significa que se pretendía un canal diferente.

Cómo llevarlo a Roblox Studio

Dale al usuario ambas rutas y los nombres de los eventos.

  • Barra de comandos (más rápido): selecciona el rig en el Explorador, abre Ver → Barra de comandos, pega todo el contenido de <Nombre>.lua, presiona Enter. El KeyframeSequence aparece en los AnimSaves del rig (o en ServerStorage si no hay nada seleccionado), donde el Editor de Animaciones puede cargarlo para ajustes.
  • Archivo: arrastra <Nombre>.rbxmx a la ventana de Studio, o haz clic derecho en un servicio → Insertar desde Archivo.
  • Publicación: para reproducirlo en un juego en vivo, debe subirse: ábrelo en el Editor de Animaciones y publica, o haz clic derecho en el KeyframeSequence → Guardar en Roblox, luego usa el id de asset resultante en un objeto Animation y Animator:LoadAnimation. Para pruebas locales rápidas en Studio, game:GetService("KeyframeSequenceProvider"):RegisterKeyframeSequence(seq) devuelve un id temporal. Los menús de Studio cambian de vez en cuando; si un paso no coincide con lo que el usuario ve, dilo y busca la redacción actual en lugar de insistir.

La exportación está horneada: un keyframe por fotograma con easing lineal, por lo que Studio reproduce exactamente lo que muestra la vista previa en cualquier rig de ese tipo. Solo se escriben las articulaciones que anima la especificación, por lo que una animación solo de la parte superior del cuerpo deja las piernas libres para la caminata predeterminada. La salida R15 lleva AuthoredHipHeight para que se reoriente a avatares de otras proporciones.

Archivos

  • scripts/ranim.cjs — motor, visor y exportador en un solo archivo. También utilizable como módulo: const R = require('.../ranim.cjs'); const c = R.compile(spec); R.report(c); R.sample(c, t).
  • scripts/selftest.cjs — verifica las matemáticas de las articulaciones contra la fórmula Motor6D de Roblox. Ejecútalo después de editar el motor.
  • examples/ — soccer_kick, jump_shot (deportes con props de balón), jab_cross (combate R15), r6_sword_slash (combate R6 con arma), backflip (rotación de cuerpo completo y salto), r6_run (bucle reflejado).
  • references/motion-cookbook.md — tablas de tiempos y recetas de poses por género. Lee la sección relevante antes de crear.

Skills relacionados