Tutoriales intermedios

Reproducir animaciones de personajes

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Reproducir animaciones de personajes es una parte importante de lo que hace que los avatares y los personajes no jugables (NPCs) sean expresivos, realistas y atractivos para tu audiencia. Además de brindar visuales inmersivos, las animaciones de personajes proporcionan a los jugadores retroalimentación sobre sus acciones, orientación sobre cómo navegar por el entorno y información vital sobre su personaje y otros.

Usando el archivo Hazardous Space Station .rbxl como referencia, este tutorial te mostrará cómo reproducir animaciones de personajes utilizando dos técnicas diferentes, incluyendo orientación sobre:

  • Sustitución de los IDs de asset de animación predeterminados del personaje por tus propias animaciones personalizadas.
  • Activación de animaciones en respuesta a las acciones del personaje dentro del espacio 3D.

Después de completar este tutorial, tendrás las habilidades para personalizar animaciones para una amplia variedad de situaciones de juego.

Cambiar animaciones predeterminadas

Cada personaje con un objeto Humanoid predeterminado, ya sea un avatar controlado por el jugador o un personaje no jugador (NPC), incluye un conjunto de animaciones predeterminadas que se reproducen cada vez que el personaje realiza acciones específicas durante la experiencia, como correr, escalar y saltar. Roblox proporciona estas animaciones listas para usar para cada experiencia sin ningún esfuerzo adicional de scripting.

Animación de Caída Predeterminada
Animación de Nadar Predeterminada
Animación de Escalada Predeterminada

Sin embargo, si estas animaciones predeterminadas no cumplen con los requisitos de diseño para el entorno de tu mundo, la estética o la narrativa general, puedes sustituirlas por animaciones personalizadas que se aplican a cada jugador que se une a tu experiencia.

Para demostrarlo, la siguiente sección te enseña cómo reemplazar la animación de caminar predeterminada con un ciclo de animación de caminar personalizado de Crear animaciones de personajes. Usando este mismo proceso, puedes sustituir cualquier animación predeterminada por tus propios IDs de asset de animación.

Animación de Caminar Predeterminada
Animación de Caminar Personalizada

Crear script

El objeto Humanoid de cada personaje incluye un objeto hijo Animator que almacena todas las animaciones predeterminadas del personaje. Para establecer cualquiera de estas animaciones predeterminadas a nuevos IDs de asset, debes crear un script en ServerScriptService para que pueda hacer referencia y anular los valores predeterminados del objeto Animator tan pronto como los jugadores carguen en la experiencia.

Para crear un script que haga referencia a los IDs de asset de animación predeterminados:

  1. En la ventana de Explorer, agrega un nuevo script a ServerScriptService.

    1. Hover sobre ServerScriptService y haz clic en el botón ⊕.
    2. Desde el menú contextual, inserta un Script.
  2. En el nuevo script, pega el siguiente código:


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("¡Animador encontrado!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

El script ResetDefaultAnimations comienza obteniendo el servicio Players, que contiene todos los objetos Player para los jugadores a medida que se conectan a un servidor. Cuando cada uno de los personajes de los jugadores se carga en la experiencia, la función onCharacterAdded espera hasta que detecta los objetos Humanoid y Animator del personaje.

Cuando detecta un objeto Animator por primera vez, el script imprime "¡Animador encontrado!" para informarte que el script está funcionando como se esperaba.

Reemplazar ID de asset

Ahora que sabes que tu script es capaz de detectar cuándo los jugadores cargan y se conectan al servidor, puedes modificar tu script para hacer referencia específicamente a los ID(s) de animación que deseas reemplazar por tus propias animaciones personalizadas.

La siguiente tabla contiene todas las animaciones predeterminadas del personaje que puedes llamar y reemplazar dentro del objeto Animator. Ten en cuenta que Idle tiene dos variaciones que puedes programar para que se reproduzcan más o menos frecuentemente.

Acción del PersonajeReferencia de Script de Animación
CorreranimateScript.run.RunAnim.AnimationId
CaminaranimateScript.walk.WalkAnim.AnimationId
SaltaranimateScript.jump.JumpAnim.AnimationId
Inactivo

animateScript.idle.Animation1.AnimationId
animateScript.idle.Animation2.AnimationId

CaeranimateScript.fall.FallAnim.AnimationId
NadaranimateScript.swim.Swim.AnimationId
Nadar (Inactivo)animateScript.swimidle.SwimIdle.AnimationId
EscalaranimateScript.climb.ClimbAnim.AnimationId

Para reemplazar el ID de asset de la animación de caminar predeterminada:

  1. Llama a la referencia de script de animación de caminar predeterminada, luego reemplaza el ID de asset con tu propio ID de asset de animación personalizada. Por ejemplo, el siguiente fragmento de código hace referencia a la animación de ciclo de caminar de Crear animaciones de personajes.


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("¡Animador encontrado!")
    local animateScript = character:WaitForChild("Animate")
    animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Realiza una prueba de juego en tu experiencia para asegurarte de que tu animación de caminar personalizada anule la animación predeterminada.

    1. Elige Test en el menú desplegable y haz clic en el botón Play a su derecha para comenzar la prueba de juego.

      Opción de prueba en el menú desplegable de modos de prueba del mezzanine de Studio.
    2. Camina por la estación espacial con tu avatar.

Activar animaciones

Mientras que la técnica anterior se centra en sustituir animaciones predeterminadas que se reproducen automáticamente cada vez que un personaje realiza acciones específicas en la experiencia, puedes activar animaciones programáticamente en respuesta a cualquier acción del personaje dentro del espacio 3D, como recoger un objeto o recibir daño de un peligro.

En este ejemplo, cuando los jugadores tocan la plataforma dorada, activan una animación de baile no predeterminada del personaje.

Este método de reproducción de animaciones es útil porque proporciona a los jugadores retroalimentación instantánea sobre cómo deben interactuar con objetos en su entorno. Para demostrar, la siguiente sección te mostrará cómo activar una animación cada vez que los personajes están demasiado cerca de fugas de vapor peligrosas como una forma de enseñar sutilmente a los jugadores a evitar caminar demasiado cerca de las paredes.

Insertar volumen

Una de las formas más comunes de activar un comportamiento de juego único es usar volúmenes, o regiones invisibles dentro del espacio 3D, para detectar cuando los personajes u objetos interactúan con áreas específicas del entorno. Cuando emparejas volúmenes con scripts, puedes usar su retroalimentación de colisión para activar programáticamente acciones, como reducir la salud del jugador o reproducir una animación.

Una vista lejana de una sala de mansión. Un contorno de una caja está en medio de la sala para significar el volumen que activa eventos de juego.
El Misterio de Duvall Drive utiliza volúmenes para activar eventos de juego que cambian la apariencia visual de la sala.

Al agregar un volumen a tu experiencia, es importante escalarlo para que solo cubra el espacio que deseas activar para tu animación. Si haces tu volumen demasiado pequeño, los jugadores pueden nunca chocar con el área para reproducir la animación; por el contrario, si haces tu volumen demasiado grande, la animación se reproducirá antes de que los jugadores lleguen al objeto o área de interés, y puede que no entiendan qué hicieron para activar la animación.

Para insertar un volumen alrededor de una fuga de vapor que activará una animación:

  1. En la ventana de Explorer, agrega una nueva parte de bloque.
  2. Posiciona y redimensiona el bloque hasta que cubra el área que deseas activar para tu animación.
  3. En la ventana de Properties,
    1. Establece Name como AnimationDetector.

    2. Establece Transparency a 1 para hacer que el bloque sea invisible.

      Un contorno de un bloque es visible alrededor de una ventilación de vapor para significar la posición del volumen.

Crear script

Ahora que tienes una región definida para activar tu animación, es hora de crear un script que detecte programáticamente cuándo los jugadores chocan con el volumen. Luego podrás escuchar eventos de colisión para activar cualquier animación que tenga sentido para los requisitos de juego.

Por ejemplo, esta técnica de animación utiliza un LocalScript en lugar de un Script para proporcionar a los jugadores retroalimentación inmediata cuando chocan con el volumen. Si el servidor escuchara la colisión y reprodujera la animación, podría haber un retraso entre el toque del jugador y la visualización de la animación debido al tiempo de replicación del servidor al cliente.

Para crear un script local que detecte cuándo el personaje del jugador local toca el volumen:

  1. En la ventana de Explorer, agrega un nuevo script a StarterCharacterScripts. Esta ubicación asegura que el script y sus hijos se clonen en el personaje del jugador al unirse y cuando respawneen de nuevo en la experiencia.

    1. Expande StarterPlayer, luego coloca el cursor sobre su hijo StarterCharacterScripts y haz clic en el botón ⊕.
    2. Desde el menú contextual, inserta un LocalScript y renómbralo como TriggerAnimation.
  2. En el nuevo script, pega el siguiente código:


    local Workspace = game:GetService("Workspace")
    local animation = script:WaitForChild("Animation")
    local humanoid = script.Parent:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    local animationTrack = animator:LoadAnimation(animation)
    local animationDetector = Workspace:WaitForChild("AnimationDetector")
    local debounce = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

El script TriggerAnimation comienza obteniendo el servicio Workspace, que contiene todos los objetos que existen en el mundo 3D. Esto es importante porque el script necesita hacer referencia al objeto Part que actúa como tu volumen.

Para cada personaje jugador que carga o respawnea de nuevo en la experiencia, el script espera a:

  • Su objeto hijo Animation, que agregarás en la siguiente sección.
  • Los objetos Humanoid y Animator del personaje.
  • El objeto de volumen en el espacio de trabajo llamado AnimationDetector.

Cuando cualquier cosa choca con el volumen, la función manejadora del evento Touched obtiene el primer ancestro que es un Model, que debería ser el personaje si el BasePart que chocó con el volumen es un descendiente de un modelo de personaje. Si lo es, la función verifica si el Model es el personaje del jugador local. Si lo es, la función entonces:

  • Establece debounce en true.
  • Reproduce y espera a que la animación termine.
  • Establece debounce de nuevo en false.

Establecer debounce de false a true y luego de nuevo a false después de que la animación haya terminado de reproducirse es un patrón de debounce que evita que la animación se active repetidamente mientras los jugadores chocan continuamente con el volumen. Para más información sobre este patrón de debounce, consulta Detectar colisiones.

Agregar animación

Si realizaras una prueba de juego en tu experiencia en este momento, tu script TriggerAnimation aún no podría reproducir una animación en respuesta a la colisión del jugador local con el volumen. Esto se debe a que está esperando un objeto hijo Animation con un ID de asset de animación que pueda referenciar, y ese objeto Animation actualmente no existe.

Para agregar una animación que el script local pueda referenciar a medida que los jugadores chocan con el volumen:

  1. En la ventana de Explorer, agrega una nueva animación a TriggerAnimation.

    1. Hover sobre TriggerAnimation y haz clic en el botón ⊕.
    2. Desde el menú contextual, inserta una Animation.
  2. Selecciona el nuevo objeto de animación, luego en la ventana de Properties, establece AnimationID al ID de asset de animación que deseas activar cuando los jugadores toquen el volumen. Por ejemplo, la muestra del Hazardous Space Station hace referencia a rbxassetid://3716468774 para reproducir una animación de un personaje cayendo hacia atrás.

  3. Realiza una prueba de juego en tu experiencia para asegurarte de que tu animación se reproduzca cuando los jugadores estén cerca de la primera fuga de vapor.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.