Reproducir animaciones de personajes es una parte importante de lo que hace que los avatares y los personajes no jugables (NPC) sean expresivos, realistas y atractivos para tu audiencia.Además de proporcionar visuales inmersivas, las animaciones de personajes proporcionan comentarios a los jugadores sobre sus acciones, orientación sobre cómo navegar por el entorno y información vital sobre su personaje y otros.
Usando el archivo Estación espacial peligrosa.rbxl como referencia, este tutorial te muestra cómo jugar animaciones de personajes usando dos técnicas diferentes, incluyendo orientación sobre:
- Intercambio de ID de animación de personaje predeterminado con tus propias animaciones personalizadas.
- Activar animaciones en respuesta a las acciones de personajes dentro del espacio 3D.
Después de completar este tutorial, tendrás las habilidades para personalizar animaciones para una gran variedad de situaciones de juego.
Cambiar las animaciones predeterminadas
Cada personaje con un objeto predeterminado Humanoid por defecto, 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 en la experiencia, como correr, escalar y saltar.Roblox proporciona estas animaciones fuera de la caja para cada experiencia sin ningún esfuerzo de programación adicional.
Sin embargo, si estas animaciones predeterminadas no cumplen con los requisitos de diseño para el entorno, estilo o narrativa general de tu mundo, puedes intercambiarlas con animaciones personalizadas que se apliquen a cada jugador que se una a tu experiencia.Esta técnica de diseño de juegos puede ayudar a que tus personajes y experiencias se sientan más personales, atractivos e inmersivos.
Para demostrar, la siguiente sección te enseña cómo intercambiar la animación de caminata predeterminada con una animación de ciclo de caminata personalizada de Crear animaciones de personajes.Usando este mismo proceso, puedes intercambiar cualquiera de las animaciones predeterminadas con tus propios ID de animación.
Crear guión
El objeto de cada personaje Humanoid incluye un objeto hijo Animator que almacena todas las animaciones predeterminadas del personaje.Para establecer cualquiera de estas animaciones predeterminadas a nuevos ID de activos, debe crear un script en el Class.ServiceScriptService para que pueda referenciar 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 ID de animación predeterminados:
En la ventana Explorador , agregue un nuevo script a ServerScriptService .
- Pase el mouse sobre Servicio de script de servidor y haga clic en el botón ⊕.
- Desde el menú contextual, insira un script .
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("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
El script ResetDefaultAnimations comienza por obtener el servicio Players que contiene todos los objetos Player para los jugadores cuando se conectan a un servidor.Cuando cada uno de los personajes del jugador se carga en la experiencia, la función onCharacterAdded espera hasta que detecte los objetos Humanoid y Animator del personaje.
Cuando detecta un objeto Animator por primera vez, el script luego imprime "Animador encontrado!" para que sepas que el script está funcionando como se pretendía.
Reemplazar assetID
Ahora que sabes que tu script es capaz de detectar cuando los jugadores se cargan y se conectan al servidor, puedes modificar tu script para referenciar específicamente el ID de animación que quieres intercambiar con tus propias animaciones personalizadas.
La siguiente tabla contiene todas las animaciones de personajes predeterminadas que puedes llamar y reemplazar dentro del objeto Animator.Tenga en cuenta que Idle tiene dos variaciones que puede programar para jugar más o menos con frecuencia.
Acción de personaje | Referencia de script de animación |
Ejorar | animateScript.run.RunAnim.AnimationId |
Caminar | animateScript.walk.WalkAnim.AnimationId |
Saltar | animateScript.jump.JumpAnim.AnimationId |
Inactivo | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Caída | animateScript.fall.FallAnim.AnimationId |
Nadar | animateScript.swim.Swim.AnimationId |
Nadar (inactivo) | animateScript.swimidle.SwimIdle.AnimationId |
Escalar | animateScript.climb.ClimbAnim.AnimationId |
Para reemplazar el ID de activo de animación de caminata predeterminado:
Llama a la referencia de guión de animación predeterminada, luego reemplaza el ID de activo con tu propio ID de animación personalizado.Por ejemplo, el siguiente ejemplo de código se refiere a la animación del ciclo de caminata 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("Animator found!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Prueba tu experiencia para asegurarte de que tu animación personalizada reemplace la animación predeterminada.
En la barra de herramientas, haz clic en el botón Jugar . Studio entra en modo de prueba de juego.
Camina por la estación espacial con tu avatar.
Activar animaciones
Mientras que la técnica anterior se centra en intercambiar 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 de personaje dentro del espacio 3D, como recoger un artículo o recibir daños de un peligro.
Este método de reproducir animaciones es útil porque proporciona a los jugadores comentarios instantáneos sobre cómo deberían interactuar con objetos en su entorno.Para demostrar, la siguiente sección te muestra cómo activar una animación cada vez que los personajes estén demasiado cerca de las 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 el comportamiento de juego único es usar volúmenes , o regiones invisibles dentro del espacio 3D, para detectar cuando los personajes o 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 acciones de forma programática, como reducir la salud del jugador o reproducir una animación.

Al agregar un volumen a tu experiencia, es importante escalarlo para que solo cubra el espacio que quieres activar 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 artículo o área de interés, y es posible que no entiendan lo que hicieron para activar la animación.
Para insertar un volumen alrededor de una fuga de vapor que desencadenará una animación:
- En la ventana Explorador , agrega una nueva parte de bloque.
- Posiciona y cambia el tamaño del bloque hasta que cubra el área que quieres activar tu animación.
- En la ventana Propiedades ,
Establece Nombre a Detector de animación .
Establece Transparencia a 1 para hacer el bloque invisible.
Crear guión
Ahora que tienes una región definida para activar tu animación, es hora de crear un script que detecte de forma programática cada vez que los jugadores se choquen con el volumen.Luego puedes escuchar los eventos de colisión para activar cualquier animación que tenga sentido para tus requisitos de juego.
Por ejemplo, esta técnica de animación utiliza un LocalScript en lugar de un Script para proporcionar comentarios inmediatos a los jugadores cuando se chocan con el volumen.Si el servidor escuchara la colisión y reproduciera la animación, podría haber un retraso entre que el jugador toque el volumen en su cliente y vea la animación reproducida debido al tiempo de replicación del servidor al cliente.
Para crear un script local que detecte cuando el personaje del jugador local toca el volumen:
En la ventana Explorador , agregue un nuevo script a StarterCharacterScripts .Esta colocación garantiza que el script y sus hijos se clonen en el personaje del jugador al unirse y cuando reaparezcan en la experiencia.
- Expandir StarterPlayer , luego pasar el mouse sobre su hijo StarterCharacterScripts y haga clic en el botón ⊕.
- Desde el menú contextual, insira un LocalScript y renómbrelo Animación de activación .
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 = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
El script TriggerAnimation comienza por obtener el servicio Workspace que contiene todos los objetos que existen en el mundo 3D.Esto es importante porque el script debe referenciar el objeto Part que actúa como tu volumen.
Para cada personaje de jugador que se carga o reaparece de nuevo en la experiencia, el script espera:
- Su objeto hijo Animation, que agregarás en la siguiente sección.
- El objeto de volumen en el espacio de trabajo llamado AnimationDetector .
Cuando algo se colisiona con el volumen, la función de manejo de eventos Touched obtiene el primer ancestro que es un Model, que debería ser el personaje si el BasePart que se colisionó con el volumen es un descendiente de un modelo de personaje.Si lo es, la función luego comprueba si el es el personaje del jugador local .Si lo es, la función entonces:
- Establece debounce a true .
- Reproduce y espera a que termine la animación.
- Establece debounce de nuevo en false .
Establecer el debounce desde false a true a false de nuevo después de que la animación termine de jugar es un patrón de debounce que evita que la animación se active repetidamente a medida que los jugadores continúan chocando con el volumen.Para obtener más información sobre este patrón de debounce, vea Detectar colisiones .
Añadir animación
Si tuviéramos que probar nuestra experiencia en este momento, tu TriggerAnimation script todavía no podría reproducir una animación en respuesta a la colisión de volumen local del jugador.Esto se debe a que está esperando un objeto hijo Animation con un ID de activo de animación al que puede hacer referencia, y ese objeto Animation no existe actualmente.
Para agregar una animación para el script local para referenciar como los jugadores chocan con el volumen:
En la ventana Explorador , agregue una nueva animación a TriggerAnimation .
- Pase el mouse sobre Animación de activación y haga clic en el botón ⊕.
- Desde el menú contextual, insira una Animación .
Seleccione el nuevo objeto de animación, luego en la ventana Propiedades , establezca AnimationID al ID de animación que desea activar cuando los jugadores toquen el volumen.Por ejemplo, las referencias de muestra de la Estación espacial peligrosa muestran rbxassetid://3716468774 para reproducir una animación de un personaje que cae hacia atrás.
Prueba tu experiencia para asegurarte de que tu animación se reproduzca cuando los jugadores estén cerca de la primera fuga de vapor.