Animaciones de personajes de juego

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

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

Usando el archivo Hazardous Space Station.rbxl como referencia, este tutorial te muestra cómo jugar animaciones de personajes usando dos técnicas diferentes, incluyendo la guía sobre:

  • Intercambiando los ID de animación de personaje predeterminados con tus propias animaciones personalizadas.
  • Activar animaciones en respuesta a las acciones del personaje dentro del espacio 3D.

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

Cambiar animaciones predeterminadas

Cada personaje con un objeto de avatar predeterminado Class.Humanoid , sea que sea un avatar de un jugador o un personaje no jugador (PNJ), incluye un conjunto de Humanoid que se reproducen siempre que el personaje realiza acciones específicas en la experiencia, como correr, escalar y saltar. Roblox proporciona estas animaciones de forma predeterminada para cada experiencia sin ningún es

Animación de caída predeterminada
Animación de natación predeterminada
Animación de escalada predeterminada

Sin embargo, si estas animaciones predeterminadas no cumplen con los requisitos de diseño para el entorno, ambiente, la estética o la historia de tu mundo, puedes intercambiarlas con animaciones personalizadas que se aplican a cada jugador que se une a tu experiencia. Esta técnica de diseño de juegos puede ayudar a tus personajes y experiencias a sentirse más personales, comprometidas y inmersivo.

Para mostrar, la siguiente sección te enseña cómo intercambiar la animación de caminata por defecto con una animación de ciclo de caminata personalizada desde Crear animaciones de personajes. Usando este mismo proceso, puedes intercambiar cualquiera de las animaciones por defecto con tus propios ID de animación.

Animación de paseo predeterminada
Animación de caminata personalizada

Crear guión

Cada objeto de Humanoid de cada personaje incluye un objeto hijo Animator que almacena todas las animaciones predeterminadas del personaje. Para establecer cualquiera de estas animaciones predeterminadas en nuevos ID de activos, debes crear un script en el Class.ServiceScriptService para

Para crear un script que referenciará los ID de animación predeterminados:

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

    1. Pase el mouse sobre Servicio de Script del Servidor y haga clic en el botón ⊕.
    2. Del menú contextual, inserta un Script .
  2. En el nuevo script, pegue el código siguiente:


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

El script Players comienza al obtener el experienciaPlayer, que contiene todos los objetos 1> Class.Player1> para los jugadores a medida que se conectan a un servidor. Cuando cada uno de los personajes del jugador se carga en

Cuando detecta un objeto Animator por primera vez, el script luego imprime "Animator found!" para informarle que el script está funcionando como se esperaba.

Reemplazar AssetID

Ahora que sabes que tu script es capaz de detectar cuando los jugadores se cargan y conectan al servidor, puedes modificar tu script para referirse específicamente a la ID de animación (s) 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. Nota que Idle tiene dos versiones que puedes programar para jugar más o menos con frecuencia.

Acción del personajeReferencia de script de animación
Ejecutar animateScript.run.RunAnim.AnimationId
Caminar animateScript.walk.WalkAnim.AnimationId
Saltar animateScript.jump.JumpAnim.AnimationId
Inactivo

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

Otoño 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 la animación de caminata predeterminada:

  1. Llamar la referencia de script de animación de caminata por defecto, luego reemplazar el ID de la pieza con su propio ID de animación personalizado. Por ejemplo, el siguiente código de ejemplo de muestra la animación del ciclo de caminata desde 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"
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Prueba tu experiencia para asegurarte de que tu animación de caminata personalizada no se sobreponga a la animacionespredeterminada.

    1. En la barra de menú, haz clic en el botón Reproducir . Studio entra en modo de prueba de juego.

      A Studio view of the Home tab with the Play button highlighted.
    2. Camina alrededor de la estación espacial con tu avatar.

Activando Animaciones

Mientras que la técnica anterior se enfoca en intercambiar animaciones predeterminadas que se reproducen automáticamente cada vez que un personaje realiza acciones específicas en la experiencia, puedes programar las animaciones para jugar en respuesta a cualquier acción de personaje dentro del espacio 3D, como recolectar un artículo o recibir daño de un peligro.

En este ejemplo, cuando los jugadores tocan la plataforma dorada, se activa una animacionesde baile de personaje no predeterminada.

Este método de jugar animaciones es útil porque proporciona a los jugadores instantáneamente retroalimentación sobre cómo deben interactuar con los objetos en su entorno, ambiente. Para demostrar, la siguiente sección te muestra cómo activar una animación cuando los personajes están demasiado cerca de las fugas de vapor peligrosas como una forma de enseñar lentamente a los jugadores a no caminar demasiado cerca de las paredes.

Insertar Volumen

Una de las formas más comunes de desencadenar un comportamiento de juego único es usar volúmenes , o regiones invisibles dentro del espacio 3D, para detectar cuando los personajes o los objetos interactúan con áreas específicas del entorno, ambiente. Cuando combinas volúmenes con scripts, puedes usar su feedback de colisión para programar acciones, como reducir la salud del jugador o jugar una animaciones.

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
La Mystery of Duvall Drive usa volúmenes para activar eventos de juego que cambian la apariencia visual de la habitación.

Cuando agrega un volumen a su experiencia, es importante escalarlo para que solo cubra el espacio que desea activar la animaciones. Si hace que su volumen sea demasiado pequeño, los jugadores nunca podrán colisionar con la área para jugar la animaciones; por otro lado, si hace que su volumen sea demasiado grande, la animación se reproducirá antes de que los jugadores lleguen al área o área de interés, y no entenderán lo que hicieron para activar la animaciones.

Para insertar un volumen alrededor de una fuga de vapor que activará una animaciones:

  1. En la ventana Explorer , agrega una nueva parte de bloque.
  2. Coloca y ajusta el bloque hasta que cubra el área que quieres para iniciar tu animaciones.
  3. En la ventana Propiedades ,
    1. Establece Nombre a AnimationDetector .

    2. Establece Transparencia a 1 para hacer el bloque invisible.

      An outline of a block is visible around a steam vent to signify the position of the volume.

Crear guión

Ahora que tienes una región definida para activar tu animaciones, es hora de crear un script que programáticamente detecta cuando los jugadores se topan 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 usa un LocalScript en lugar de un Script para proporcionarle a los jugadores retroalimentación instantánea cuando se chocan con el volumen. Si el servidor escuchara la colisión y jugara la animaciones, podría haber un retraso entre el jugador que toca el volumen en su cliente y ve la animación jugar debido al tiempo de replicación desde el servidor al cliente.

Para crear un script local que detectará cuando el personaje del jugador local toque el volumen:

  1. En la ventana Explorer , agrega un nuevo script a StartercharacterScripts . Este lugar garantiza que el script y sus hijos se clonen en el personaje del jugador al unirse y cuando reaparecen en la experiencia.

    1. Expand StarterPlayer , then hover over its StarterCharacterScripts child and click the ⊕ button.
    2. Del menú contextual, inserta un LocalScript y renombralo TriggerAnimation .
  2. En el nuevo script, pegue el código siguiente:


    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 Workspace comienza obteniendo el servicio Part, que contiene todos los objetos que existen en el mundo 3D. Esto es importante porque el script necesita referenciar el objeto 1>Class.Part1> que actúa como tu volumen.

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

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

Cuando algo se interpone con el volumen, el evento Touched que recibe el controlador de eventos funciona el primer ancestro que es un Model, que debería ser el personaje si el volumen se interpuso con el aplicación de modeladode personaje. Si lo es, la función luego comprueba si el

  • Establece el rebote a true .
  • Reproduce y espera a que finalizarla animación.
  • Establece el rebote de vuelta a false .

Establecer el rebote de false a true a false después de que la animación termine de jugar es un patrón de rebote que evita que la animación se repita continuamente mientras los jugadores se chocan con el volumen. Para obtener más información sobre este patrón de rebote, see 1> Detectando Colisiones1> .

Añadir Animación

Si jugarías tu experiencia ahora mismo, tu script de TriggerAnimation aún no podría reproducir una animación en respuesta a la colisión de volumen del jugador local. Esto se debe a que está esperando un objeto de clase Animation con un activo de animación que puede referenciar, y que el objeto de clase Animation no existe actualmente.

Para agregar una animación para que el script local se refiera a medida que los jugadores chocan con el volumen:

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

    1. Pase el cursor sobre TriggerAnimation y haga clic en el botón ⊕.
    2. Del menú contextual, inserta una Animación .
  2. Seleccione el nuevo objeto de animación, luego en la ventana Propiedades , establezca AnimationID en el ID de animación que desea que se ejecute cuando los jugadores tocan el volumen. Por ejemplo, la muestra de Estación Espacial Peligrosa hace referencia a 1> rbxassetid://37164687741> para jugar una animación de un personaje que cae hacia

  3. Prueba tu experiencia para asegurarte de que tu animación se reproduzca cuando los jugadores estén cerca de la primera fuga de vapor.