Editor de Gráficos de Animación

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

El Editor de Gráficos de Animación es una herramienta visual, basada en nodos, que empodera a artistas técnicos y animadores para construir lógica de animación compleja directamente en Roblox Studio. Al proporcionar una interfaz simplificada para crear comportamientos como árboles de mezcla, elimina la dependencia tradicional de la programación manual para el movimiento de personajes.

Este sistema trabaja en conjunto con tu flujo de trabajo de animación existente:

  • Editor de Animaciones: Sigue utilizando el Editor de Animaciones como tu herramienta principal para autorizar clips individuales y ajustar fotogramas clave y curvas.
  • Editor de Gráficos de Animación: Utiliza este nuevo espacio de trabajo para tomar esos clips y organizarlos en un árbol lógico para impulsar comportamientos de juego sofisticados.

Diseñado para mejorar la colaboración, el gráfico visual permite a los desarrolladores inspeccionar, depurar y entender rápidamente la lógica creada por los animadores. Mientras que los artistas se enfocan en refinar el movimiento interactivo, los desarrolladores aún pueden acceder a los nodos del gráfico de animación programáticamente para tener control directo sobre las animaciones y estados mezclados.

Construir un gráfico


Para comenzar a construir la lógica para un personaje animable, accede al editor de gráficos de animación a través de la pestaña Avatar en la cinta de Studio. Los siguientes pasos demuestran cómo inicializar un rig y construir una red de nodos básica utilizando animaciones de caminar y saludar predeterminadas.

Para un análisis más profundo de aplicaciones prácticas, puedes explorar el Archivo de Referencia del Gráfico de Animación, que contiene ejemplos tanto fundamentales como complejos de implementación.

Para crear tu propio gráfico de animación, similar al ejemplo básico proporcionado en la referencia, utiliza los siguientes pasos:

  1. En Studio, añade un rig animable navegando a la pestaña Avatar y seleccionando PersonajeMi Avatar.

    Botón de Personaje resaltado en la barra de herramientas de Studio.
  2. Abre el Editor de Gráficos de Animación navegando a Editor de Gráficos en la pestaña Avatar.

    Editor de Gráficos de Animación indicado en la barra de herramientas de Studio.
  3. Selecciona el rig animable en la vista 3D y selecciona Crear Gráfico.

  4. En el Editor de Gráficos, haz clic derecho y selecciona Clip.

    Lista de nodos en un menú de clic derecho
  5. En el nuevo nodo Clip, establece el ID de la Animación.

    1. Selecciona el menú desplegable ID de Animación.

    2. Para enviar un ID de activo de animación específico, haz clic en Importar.

      Campo indicado en el módulo de importación de animación para agregar el ID de la Animación
    3. En el campo ID de Animación, añade la animación de caminar predeterminada: 507777826.

    4. Selecciona Importar.

  6. Agrega otro nodo de clip repitiendo los pasos 4-5 usando la animación de saludar predeterminada: 507770239.

    Dos nodos de clip con un ID de Animación poblado
  7. En el Editor de Gráficos, haz clic derecho y selecciona Agregar.

    Agregar nodo
  8. Conecta los nodos Clip al nodo Agregar arrastrando el conector de salida superior derecho al puerto correspondiente:

    1. Conecta el nodo Clip con la animación de caminar al puerto Base.
    2. Conecta el nodo Clip con la animación de saludar al puerto Adicional.
    Ambos nodos de clip conectados al nodo agregar
  9. Desde el nodo Agregar, conecta el conector de salida superior derecho al puerto de salida del gráfico Pose.

    Todos los nodos conectados a un nodo de salida final
  10. (Opcional) Asigna un parámetro a tu variable Speed.

    1. Haz clic y arrastra el puerto verde de velocidad a un área vacía. Se muestra un nuevo nodo de parámetro.

      Haciendo clic y arrastrando el conector del puerto de Velocidad del nodo Clip.
    2. En la parte superior izquierda del editor de gráficos, utiliza el panel de parámetros para modificar rápidamente los parámetros en tus nodos. También puedes acceder a esto programáticamente.

      Panel de parámetros, nodo de parámetro y nodo de clip mostrando valores compartidos.
  11. Prueba la animación presionando el botón de reproducción.

    Icono del botón de reproducción para previsualizar animaciones
  12. Intenta probar varios pesos, velocidades, modos de reproducción y otras animaciones. Para más información sobre nodos individuales, consulta la Referencia de Nodos.

Integración de API

Crear y desplegar un Gráfico de Animación sigue el pipeline estándar de animación de Roblox. Después de seleccionar un rig en el Editor de Gráficos de Animación, se crea un nuevo activo AnimationGraphDefinition. Este activo sirve como el contenedor para tus nodos, conexiones y parámetros. Una vez que tu lógica está finalizada, publicas el gráfico para recibir un ID de Activo estándar.

En tus scripts, interactúas con estos gráficos cargándolos en un Animator como lo harías con una animación tradicional. Para impulsar la lógica interna del gráfico, utiliza AnimationTrack:SetParameter() para pasar valores en tiempo real, como la velocidad de movimiento o booleanos de estado, directamente a las variables del gráfico.


local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Tu ID del gráfico publicado
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Actualizaciones de parámetros dinámicos a través de RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)

Referencia de Nodos

Cada nodo de gráfico de animación sirve como una puerta lógica o fuente de datos que procesa datos de animación antes de que lleguen al rig del personaje. Esta sección proporciona un desglose técnico de los bloques funcionales dentro del Editor de Gráficos de Animación. Todos los nodos actualmente producen una pose de animación.

Cada sección de nodo incluye:

  • Definición – Un resumen del propósito y rol del nodo dentro del gráfico.
  • Entradas – Los flujos de datos que entran en el nodo. Varias entradas se representan como Input1, Input2, ..., InputN.
  • Propiedades de Entrada – Configuraciones atadas directamente a una entrada específica (una entrada de inactividad asignada a una posición de 0.5 en un nodo Blend1D).
  • Datos de Evento – Eventos emitidos o consumidos por el nodo para activar la lógica interna del gráfico o scripts de Luau externos. Este comportamiento puede cambiar durante el desarrollo de la beta.

Reglas de eventos globales

Para todos los nodos y transiciones, las siguientes reglas se aplican por defecto:

  • Los eventos se propagan hacia arriba desde su nodo fuente a través del gráfico. Cada evento lleva un peso que representa la influencia de su fuente en la mezcla final. Si el peso llega a cero en algún momento, el evento se silencia.
  • Los nodos sin lógica de eventos personalizada pasan todos los eventos a través sin cambios; los nodos que mezclan o seleccionan entre entradas pueden escalar el peso o bloquear eventos de entradas no primarias (ver sección de Eventos por nodo).
  • Los eventos de marcador que alcanzan la parte superior del gráfico pueden ser observados a través de AnimationTrack:GetMarkerReachedSignal().

Clip

Nodo Clip

Una referencia a un activo de AnimationClip. Esto sirve como un nodo hoja en el gráfico, generando los datos de animación en bruto que alimentan otros nodos para mezcla, selección o modificación.

Entradas
  • Ninguna
Propiedades
PropiedadTipoDescripción
ClipID de activoEl activo de animación a reproducir (por ejemplo, rbxassetid://12345).
Modo de ReproducciónEnum.AnimationNodePlayMode

Define el comportamiento del clip una vez que alcanza el final de su duración.

  • Bucle (predeterminado): Se reinicia automáticamente desde el principio una vez que el clip termina.
  • PingPong: Se reproduce de inicio a fin, luego inmediatamente se reproduce al revés de fin a inicio.
  • Una vez y mantener: Se reproduce una vez y mantiene la pose final al completar.
  • Una vez y reiniciar: Se reproduce una vez y se restaura a la pose inicial al completar.
ReversaBooleanoControla la dirección de la reproducción.
VelocidadNúmeroUn multiplicador para la tasa de reproducción. 0.0 pausa el gráfico, 1.0 es velocidad normal, y 2.0 es el doble de velocidad.
RecortarBooleanoActiva o desactiva si la duración del clip debe ser truncada.
RecortarInicioNúmeroLa marca de tiempo absoluta (en segundos) donde debería comenzar la reproducción.
RecortarFinNúmeroLa marca de tiempo absoluta (en segundos) donde debería terminar la reproducción.
Datos de eventos
  • Manejo de Eventos: Ninguno. Este es un nodo hoja sin hijos.
  • Emisión de Eventos: Lee marcadores personalizados incrustados en el clip de animación (por ejemplo, "Paso", "Golpe de Arma") y los emite como eventos nombrados en el marco preciso en que ocurren. Si el clip está recortado, solo se emiten marcadores dentro del intervalo definido [TrimStart, TrimEnd] (inclusive).

Seleccionar

Nodo Seleccionar

Selecciona entre cualquier número de entradas a través de la propiedad Selección. Siempre que la selección actual cambie, se activa una nueva transición.

Entradas
  • Input1...InputN
Propiedades
PropiedadTipoDescripción
SelecciónCadenaEl ID único de la entrada que se va a seleccionar, que coincide con el nombre de la conexión de entrada (por ejemplo, "Caminar").
Datos de eventos
  • Manejo de Eventos: Los eventos de la entrada seleccionada actualmente pasan a través de su peso sin cambios.
  • Emisión de Eventos: Pasa solo todos los eventos de la entrada seleccionada actualmente. Durante una transición, la emisión de eventos sigue reglas de eventos globales.

SelecciónPrioritaria

Nodo Selección Prioritaria

Evalúa una lista de entradas conectadas de arriba a abajo y reproduce la primera cuya condición se evalúa como verdadera. Esto permite una selección de animación jerárquica basada en lógica específica. Siempre que la selección actual cambie, se activa una nueva transición.

Entradas
  • Input1...InputN
    • Trigger (Booleano): Una condición lógica que debe ser verdadera para que se active esta entrada. En las versiones actuales, esto está conectado a un parámetro booleano.
    • Interrumpible (Enum.AnimationNodeInterruptible): Define la regla de cuándo esta animación activa puede ser interrumpida por una entrada de mayor prioridad.
      • Siempre (predeterminado): La entrada puede ser interrumpida en cualquier momento por una condición de mayor prioridad.
      • Terminado: La animación actual debe completar su reproducción antes de que una entrada de mayor prioridad pueda tomar control.
      • Trigger: La entrada solo es interrumpible cuando el InterruptibleTrigger está configurado en verdadero.
    • InterruptibleTrigger (Booleano): Solo disponible si Interrumpible está configurado en Trigger. La entrada puede ser interrumpida cuando esta expresión específica es verdadera.
Propiedades
PropiedadTipoDescripción
DefaultInterruptibleEnum.AnimationNodeInterruptibleLa regla de interrupción base aplicada a todas las entradas. Cada entrada puede anular esto con su propia propiedad de entrada Interruptible.
DefaultInterruptibleTriggerBooleanoEl valor de activación base utilizado cuando el modo Interruptible resuelto de una entrada es Trigger. Cada entrada puede anular esto con su propia propiedad de entrada InterruptibleTrigger.
Datos de eventos
  • Manejo de Eventos: Los eventos de la entrada seleccionada actualmente pasan a través de su peso sin cambios.
  • Emisión de Eventos: Pasa solo todos los eventos de la entrada seleccionada actualmente. Durante una transición, la emisión de eventos sigue reglas de eventos globales.

Secuencia

Nodo Secuencia

Activa las entradas conectadas en un orden secuencial específico basado en las condiciones de espera definidas. Siempre que la selección actual cambie, se activa una nueva transición.

Entradas
  • Input1...InputN
    • WaitFor (Enum.AnimationNodeWaitFor): Especifica la condición que debe cumplirse antes de que la secuencia avance a la siguiente entrada.
      • Terminado (predeterminado): Avanza a la siguiente entrada cuando la entrada actual completa un ciclo. El comportamiento de avance depende de la entrada conectada:
        • Clip de reproducción única: Avanza cuando el clip termina.
        • Clip en bucle: Avanza después de que se completa un bucle completo.
        • Secuencia con bucles infinitos: Avanza después de un ciclo completo a través de todas las entradas.
        • Secuencia con bucles infinitos: Avanza después de que se completan todos los bucles.
      • Trigger: Activa la siguiente entrada cuando una expresión lógica personalizada se evalúa como verdadera.
    • WaitForTrigger (Booleano): Solo disponible cuando WaitFor está configurado en Trigger.
Propiedades
PropiedadTipoDescripción
BucleCountNúmeroEl número de veces que se ciclará a través de toda la secuencia (el valor predeterminado es 1). Un valor de 0 indica un bucle infinito. Una vez alcanzado el conteo, el nodo respeta la configuración de bucle o mantener de la última entrada.
DefaultWaitForEnum.AnimationNodeWaitForLa condición de espera base aplicada a todas las entradas. Cada entrada puede anular esto con su propia propiedad de entrada WaitFor.
Datos de eventos
  • Manejo de Eventos: Los eventos de la entrada activa actualmente pasan a través de su peso sin cambios.
  • Emisión de Eventos: Pasa solo todos los eventos de la entrada activa actualmente en la secuencia. Durante una transición, la emisión de eventos sigue reglas de eventos globales.

SecuenciaAleatoria

Nodo Secuencia Aleatoria

Selecciona y reproduce una de sus entradas conectadas al azar. Cuando la animación actualmente seleccionada complete, el nodo elige al azar otra entrada para reproducir. Asigna a cada entrada un peso específico para influir en la probabilidad de ser elegida. Siempre que la selección actual cambie, se activa una nueva transición.

Entradas
  • Input1...InputN
    • Peso (Número): Determina la probabilidad de que esta entrada sea seleccionada; pesos más altos aumentan la posibilidad de selección.
Propiedades
PropiedadTipoDescripción
BucleCountNúmeroEl número de entradas que el nodo reproducirá antes de detenerse. Una vez alcanzado, el nodo respeta la configuración de bucle o mantener de la última entrada. El valor predeterminado es 0 para infinito.
SemillaNúmeroUn valor utilizado para inicializar el Generador de Números Aleatorios (RNG), asegurando que la secuencia se mantenga constante entre diferentes clientes. El valor predeterminado es -1 para Semilla aleatoria.
Datos de eventos
  • Manejo de Eventos: Los eventos de la entrada activa actualmente pasan a través de su peso sin cambios.
  • Emisión de Eventos: Pasa solo todos los eventos de la entrada activa actualmente en la secuencia. Durante una transición, la emisión de eventos sigue reglas de eventos globales.

Sobre

Nodo Sobre

Superpone la pose Sobre a la pose Base. Cuando se combina con un nodo Máscara, las juntas enmascaradas en la pose Sobre revelan completamente la pose Base, creando un efecto de superposición transparente.

Entradas
  • Base: La capa de fondo o inferior, típicamente una animación de cuerpo completo como locomoción o un estado inactivo.
  • Sobre: La capa del primer plano o superior que se aplicará sobre la base, como un gesto de mano o una animación de uso de herramienta.
Propiedades
PropiedadTipoDescripción
PesoNúmeroEl peso de mezcla utilizado para atenuar la pose Sobre. El valor predeterminado es 1.0 (anulación total) y no está limitado.
Datos de eventos
  • Manejo de Eventos:
    • El nodo escucha eventos de ambas entradas Base y Sobre.
  • Emisión de Eventos:
    • Eventos de Base: Todos los eventos de la entrada Base se pasan a través sin modificar.
    • Eventos de Sobre: Los eventos de la entrada Sobre se escalan por la propiedad de Peso.
      • Con un Peso de 0.5, los eventos Sobre se propagan a la mitad del peso.
      • Con un Peso de 0, se silencian.

Agregar

Nodo Agregar

Agrega la pose Adicional a la pose Base, atenuada por un Peso específico (sin límite).

Entradas
  • Base: La pose de animación primaria.
  • Adicional: La pose que se superpondrá a la base.
Propiedades
PropiedadTipoDescripción
PesoNúmeroDetermina la fuerza de la pose adicional aplicada a la base.
Datos de eventos
  • Manejo de Eventos: El nodo escucha eventos de ambas entradas Base y Adicional.
  • Emisión de Eventos: Todos los eventos de ambas entradas Base y Adicional se pasan a través sin modificar.

Restar

Nodo Restar

Convierte una animación en una pose aditiva restando una pose base relativa de la pose objetivo (ABA - B). El resultado se atenúa por un Peso específico (sin límite).

Entradas
  • A: La pose de animación objetivo.
  • B: La pose base relativa que se va a restar.
Propiedades
PropiedadTipoDescripción
PesoNúmeroDetermina la fuerza del efecto de resta aplicado al resultado.
Datos de eventos
  • Manejo de Eventos: El nodo escucha eventos de ambas Entrada A y Entrada B.
  • Emisión de Eventos: Todos los eventos de ambas Entrada A y Entrada B se pasan a través sin modificar.

Mezcla1D

Nodo Mezcla1D

Interpole linealmente entre las dos poses de animación más cercanas a la posición actual de entrada en un solo eje.

Entradas
  • Input1...InputN
    • Posición (Número): La coordenada específica para cada entrada subsiguiente en el eje de mezcla.
Propiedades
PropiedadTipoDescripción
PosiciónNúmeroEl valor activo actual en el eje de mezcla utilizado para muestrear las animaciones. Si Posición está fuera del rango de posiciones de entrada definidas, el nodo extrapola usando las dos entradas más cercanas.
Sincronización de FaseEnum.AnimationNodePhaseSync

Configura si el tiempo de las entradas hijas debe sincronizarse.

  • Sincronizado (predeterminado): Sincronización normalizada. El nodo calcula una "duración virtual" basada en el promedio ponderado de las entradas activas. El paso de tiempo de cada nodo de entrada se ajusta de modo que todas las entradas converjan a la misma fase, manteniendo animaciones de diferentes longitudes en sincronía.
  • No sincronizado: Mezcla estándar donde los clips avanzan independientemente a sus propias tasas de reproducción.
Datos de eventos
  • Manejo de Eventos: El nodo escucha eventos de todos los nodos hijos actualmente activos.
  • Emisión de Eventos: Solo los eventos de la entrada activa de mayor peso se propagan, escalados por su peso de mezcla. Los eventos de la entrada secundaria se silencian.

Mezcla2D

Nodo Mezcla2D

Mezcla múltiples poses de animación entre sí basándose en dos parámetros de entrada dentro de un espacio de coordenadas 2D. Esto generaliza el nodo Mezcla1D para manejar escenarios complejos, como la mezcla basada tanto en la dirección de movimiento como en la velocidad simultáneamente.

Entradas
  • Input1...InputN
    • X (Número): La coordenada X para cada entrada subsiguiente.
    • Y (Número): La coordenada Y para cada entrada subsiguiente.
Propiedades
PropiedadTipoDescripción
Modo de EntradaEnum.AnimationNodeBlend2DInputMode

Define el sistema de coordenadas utilizado para evaluar el espacio de mezcla:

  • Cartesiano (predeterminado): Usa coordenadas de cuadrícula 2D estándar. X e Y representan la posición actual dentro del espacio de mezcla.
  • Polar: Usa valores angulares y de magnitud. X representa la dirección en radianes, mientras que Y representa la magnitud o fuerza del movimiento. La dirección tiene más peso que la magnitud, por lo que las entradas en ángulos similares pero diferentes magnitudes se mezclan de manera más suave que las entradas en diferentes ángulos.
XNúmeroLa coordenada X actual (Cartesiano) o dirección en radianes (Polar).
YNúmeroLa coordenada Y actual (Cartesiano) o magnitud (Polar).
Sincronización de FaseEnum.AnimationNodePhaseSync

Configura si el tiempo de las entradas hijas debe sincronizarse.

  • Sincronizado (predeterminado): Sincronización normalizada. El nodo calcula una "duración virtual" basada en el promedio ponderado de las entradas activas. El paso de tiempo de cada nodo de entrada se ajusta de modo que todas las entradas converjan a la misma fase, manteniendo animaciones de diferentes longitudes en sincronía.
  • No sincronizado: Mezcla estándar donde los clips avanzan independientemente a sus propias tasas de reproducción.
Datos de eventos
  • Manejo de Eventos: El nodo escucha eventos de todos los nodos hijos actualmente activos.
  • Emisión de Eventos: Solo los eventos de la entrada activa de mayor peso se propagan, escalados por su peso de mezcla. Los eventos de la entrada secundaria se silencian.

Máscara

Nodo Máscara

Aplica una máscara predefinida a la Pose de entrada. Una máscara se define por un peso por objeto (por ejemplo, articulación) en la jerarquía del rig, permitiendo un control preciso o "desvanecimiento" de la animación.

Entradas
  • Pose: La pose de animación a ser enmascarada.
Propiedades
PropiedadTipoDescripción
MáscaraObjectValue

Un ObjectValue (creado como un hijo directo de la definición de nodo de máscara AnimationNodeDefinition) que define los pesos de la máscara. Puede funcionar de una de dos maneras:

  • Directamente: El ObjectValue contiene atributos que mapean los nombres de los objetos del rig a valores de peso específicos.
  • Por Referencia: El ObjectValue hace referencia a otra Instance que contiene los atributos de mapeo. Esto permite máscaras compartidas a través de diferentes nodos en el gráfico.

Al crear una máscara, puedes elegir un esquema de rig (HumanoidRigDescription o Selector) para poblar la jerarquía.

  • HumanoidRigDescription: Estandariza la máscara para personajes humanoides.
  • Selector: Permite al usuario seleccionar cualquier rig específico en el espacio de trabajo para poblar la jerarquía de la máscara.
InvertirBooleanoCuando es verdadero, aplica los valores de peso como 1 - peso. Esto permite reutilizar una máscara inversamente sin crear un nuevo activo.
Datos de eventos
  • Manejo de Eventos: El nodo escucha todos los eventos de la entrada Pose.
  • Emisión de Eventos: Todos los eventos de la entrada Pose se pasan a través sin modificar.

Velocidad

Nodo Velocidad

Modifica la tasa de reproducción de una pose de animación entrante.

Entradas
  • Pose: La pose de animación o subgrafo cuya velocidad de reproducción se modificará.
Propiedades
PropiedadTipoDescripción
VelocidadNúmeroUn multiplicador aplicado al delta de tiempo (dtdt). 0.0 pausa el gráfico, 1.0 es velocidad normal, y 2.0 es el doble de velocidad.
Datos de eventos
  • Manejo de Eventos: El nodo escucha eventos de la entrada Pose.
  • Emisión de Eventos: Todos los eventos de la entrada Pose se pasan a través sin modificar. Ten en cuenta que, mientras la velocidad de reproducción visual cambia, el tiempo de los eventos emitidos (como marcadores) se escalará en consecuencia con la velocidad de reproducción modificada.

SalidaDelGráfico

Nodo SalidaDelGráfico

Representa la pose final evaluada del gráfico. Este nodo se incluye automáticamente en todos los nuevos gráficos en el Editor de Gráficos de Animación. Su presencia asegura que el gráfico siempre sea válido y produzca consistentemente una pose de animación.

Entradas
  • Pose: Los datos de animación finales procesados que se aplicarán al rig.
Propiedades
  • Ninguna
Datos de eventos
  • Manejo de Eventos: El nodo escucha todos los eventos pasados a través de la entrada conectada final.
  • Emisión de Eventos: Este nodo sirve como el punto de salida para el pipeline de animación y no emite señales de regreso al gráfico.

Transiciones

Varios nodos en el Gráfico de Animación (como Seleccionar, SeleccionarPrioritaria, Secuencia, y SecuenciaAleatoria) gestionan cómo se mezclan las animaciones al cambiar entre entradas activas. Para evitar redundancias en la referencia de nodos, estos comportamientos están definidos por grupos de propiedades de transición estandarizadas.

Transición predeterminada

Transición Predeterminada

El comportamiento de mezcla base aplicado al nodo siempre que se cambia a una nueva entrada activa.

Anulación de transición

Anulación de Transición

Propiedades de enlace específicas de entrada que sobresalen la transición predeterminada. Estas se aplican cuando el nodo transiciona a esa entrada específica.

Replicación

Los parámetros del gráfico de animación son locales a cada AnimationTrack y no se replican automáticamente. Esto puede cambiar en futuras actualizaciones, pero el enfoque actualmente recomendado utiliza:

  • Cliente → Servidor: Un RemoteEvent para enviar parámetros desde el cliente propietario al servidor a una tasa de tick fija.
  • Servidor → Otros Clientes: Atributos de instancia que se replican automáticamente a todos los clientes.

Personajes de jugador

Un script del cliente controla los personajes de los jugadores. Dado que solo el cliente propietario conoce el estado actual del juego (entrada de movimiento, estado del humanoide, etc.), los parámetros deben fluir del cliente propietario al servidor y luego a todos los demás clientes.

Configuración

Bajo StarterCharacterScripts, crea:

  • Un LocalScript para la animación del lado del cliente y el control de parámetros.
  • Un Script para la replicación del lado del servidor.
  • Un RemoteEvent para la comunicación cliente-servidor.

Script del cliente

El cliente propietario controla los parámetros a partir de eventos del juego y los envía al servidor periódicamente. Otros clientes leen atributos replicados desde el script del servidor.


local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- Cargar el gráfico de animación
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- Reemplazar con tu ID de gráfico publicado
local track = animator:LoadAnimation(animation)
track:Play()
local isLocalCharacter = Players:GetPlayerFromCharacter(character) == Players.LocalPlayer
if not isLocalCharacter then
-- Leer parámetros replicados desde el script del servidor
local animateServer = script.Parent:WaitForChild("AnimateServer")
for attribute, value in animateServer:GetAttributes() do
track:SetParameter(attribute, value)
end
animateServer.AttributeChanged:Connect(function(attribute)
track:SetParameter(attribute, animateServer:GetAttribute(attribute))
end)
return
end
-- Jugador local: controlar parámetros a partir del juego
local params = {}
local function setParam(key, value)
track:SetParameter(key, value)
params[key] = value
end
-- Ejemplo: controlar parámetros desde el estado del humanoide
humanoid.Running:Connect(function(speed)
setParam("Speed", speed)
setParam("State", if speed < 0.1 then "Idle" else "Moving")
end)
-- Enviar parámetros al servidor a una tasa de tick fija
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
local TICK_RATE = 1 / 20
local lastSendTime = 0
RunService.Stepped:Connect(function(gameTime)
if gameTime - lastSendTime > TICK_RATE then
lastSendTime = gameTime
replicateEvent:FireServer(params)
end
end)

Script del servidor

Recibe parámetros del cliente propietario, controla el gráfico de animación del lado del servidor y propaga valores como atributos para replicación a otros clientes.


local Players = game:GetService("Players")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- Cargar el mismo gráfico de animación en el servidor
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- Mismo ID de gráfico que el cliente
animation.Parent = script
local track = animator:LoadAnimation(animation)
track:Play()
-- Recibir parámetros del cliente propietario y replicar a través de atributos
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
replicateEvent.OnServerEvent:Connect(function(player, params)
if Players:GetPlayerFromCharacter(character) ~= player then
return
end
for key, value in params do
track:SetParameter(key, value)
script:SetAttribute(key, value)
end
end)

NPCs

Dado que el servidor controla la animación de NPC, solo se necesita la replicación del servidor al cliente. Controla el gráfico de animación en el servidor, escribe parámetros como atributos en un Script del servidor y léelos en los clientes utilizando el mismo patrón de Instance.AttributeChanged mostrado anteriormente.

Latencia

Otros clientes ven animaciones con un pequeño retraso igual al intervalo de tick (hasta 50 ms a 20 Hz) más la latencia de la red. Puedes reducir el intervalo de tick aumentando la frecuencia (como 1/30), a costa de un mayor tráfico de red. 20 Hz es un valor predeterminado razonable; la mezcla de animaciones es lo suficientemente indulgente como para que los pequeños retrasos sean difíciles de notar.

©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.