L'Éditeur de Graphique d'Animation est un outil visuel basé sur des nœuds qui permet aux artistes techniques et aux animateurs de construire une logique d'animation complexe directement dans Roblox Studio. En fournissant une interface simplifiée pour créer des comportements comme des arbres de mélange, il élimine la dépendance traditionnelle à la scriptation manuelle pour le mouvement des personnages.
Ce système fonctionne en tandem avec votre flux de travail d'animation existant :
- Éditeur d'Animation : Continuez à utiliser l'Éditeur d'Animation comme votre outil principal pour créer des clips individuels et peaufiner les images clés et les courbes.
- Éditeur de Graphique d'Animation : Utilisez cet outil pour prendre ces clips et les organiser dans un arbre logique pour piloter un comportement de jeu sophistiqué.
Conçu pour améliorer la collaboration, le graphique visuel permet aux développeurs d'inspecter, de déboguer et de comprendre rapidement la logique créée par les animateurs. Pendant que les artistes se concentrent sur le raffinement du mouvement interactif, les développeurs peuvent toujours accéder aux nœuds du graphique d'animation de manière programmatique pour un contrôle direct sur les animations et états mélangés.
Construire un graphique
Pour commencer à construire la logique pour un personnage animable, accédez à l'éditeur de graphique d'animation via l'onglet Avatar dans le ruban Studio. Les étapes suivantes montrent comment initialiser un rig et construire un réseau de nœuds de base en utilisant les animations de marche et de salutation par défaut.
Pour une plongée plus profonde dans les applications pratiques, vous pouvez explorer le Fichier de Référence du Graphique d'Animation, qui contient à la fois des exemples d'implémentation fondamentaux et complexes.
Pour créer votre propre graphique d'animation, similaire à l'exemple de base fourni dans la référence, utilisez les étapes suivantes :
Dans Studio, ajoutez un rig animable en naviguant vers l'onglet Avatar et en sélectionnant Personnage ⟩ Mon Avatar.

Ouvrez l'Éditeur de Graphique d'Animation en naviguant vers Éditeur de Graphique dans l'onglet Avatar.

Sélectionnez le rig animable dans la vue 3D et sélectionnez Créer Graphique.
Dans l'Éditeur de Graphique, faites un clic droit et sélectionnez Clip.

Dans le nouveau nœud Clip, définissez l'ID d'Animation.
Sélectionnez le menu déroulant ID d'Animation.
Pour soumettre un ID d'actif d'animation spécifique, cliquez sur Importer.

Dans le champ ID d'Animation, ajoutez l'animation de marche par défaut : 507777826.
Sélectionnez Importer.
Ajoutez un autre nœud clip en répétant les étapes 4-5 en utilisant l'animation de salutation par défaut : 507770239.

Dans l'Éditeur de Graphique, faites un clic droit et sélectionnez Ajouter.

Connectez les nœuds Clip au nœud Ajouter en faisant glisser le connecteur de sortie en haut à droite vers le port approprié :
- Connectez le nœud Clip avec l'animation de marche au port Base.
- Connectez le nœud Clip avec l'animation de salutation au port Additive.

Depuis le nœud Ajouter, connectez le connecteur de sortie en haut à droite au port de sortie du graphique Pose.

- OPTIONNELAssignez un paramètre à votre variable Vitesse.
Cliquez et faites glisser le port de Vitesse vert vers une zone vide. Un nouveau nœud de paramètre s'affiche.

En haut à gauche de l'éditeur de graphique, utilisez le panneau de paramètres pour modifier rapidement les paramètres dans vos nœuds. Vous pouvez également y accéder de manière programmatique.

Testez l'animation en appuyant sur le bouton de lecture.

Essayez de tester divers poids, vitesses, modes de lecture et autres animations. Pour plus d'informations sur les nœuds individuels, consultez la référence des nœuds.
Intégration API
Créer et déployer un Graphique d'Animation suit le pipeline d'animation standard de Roblox. Après avoir sélectionné un rig dans l'Éditeur de Graphique d'Animation, un nouvel actif AnimationGraphDefinition est créé. Cet actif sert de conteneur pour vos nœuds, connexions et paramètres. Une fois votre logique finalisée, vous publiez le graphique pour recevoir un ID d'Actif standard.
Dans vos scripts, vous interagissez avec ces graphiques en les chargeant sur un Animator comme vous le feriez avec une animation traditionnelle. Pour piloter la logique interne du graphique, utilisez AnimationTrack:SetParameter() pour passer des valeurs en temps réel—comme la vitesse de mouvement ou des booléens d'état—directement dans les variables du graphique.
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Votre ID de Graphique Publié
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Mises à jour dynamiques des paramètres via RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)Référence des nœuds
Chaque nœud de graphique d'animation sert de porte logique ou de source de données qui traite les données d'animation avant qu'elles n'atteignent le rig du personnage. Cette section fournit une analyse technique des blocs fonctionnels au sein de l'Éditeur de Graphique d'Animation. Tous les nœuds produisent actuellement une pose d'animation.
Chaque section de nœud comprend :
- Définition – Un résumé de l'objectif et du rôle du nœud au sein du graphique.
- Entrées – Les flux de données entrant dans le nœud. Plusieurs entrées sont représentées comme Input1, Input2, ..., InputN.
- Propriétés d'entrée – Paramètres directement liés à une entrée spécifique (une entrée Idle assignée à une Position de 0.5 sur un nœud Blend1D).
- Données d'événement – Événements émis ou consommés par le nœud pour déclencher la logique interne du graphique ou des scripts Luau externes. Ce comportement peut changer au cours du développement bêta.
Règles d'événements globaux
Pour tous les nœuds et transitions, les règles suivantes s'appliquent par défaut :
- Les événements se propagent vers le haut depuis leur nœud source à travers le graphique. Chaque événement porte un poids représentant l'influence de sa source dans le mélange final. Si le poids atteint zéro à un moment donné, l'événement est silencieux.
- Les nœuds sans logique d'événement personnalisée passent tous les événements sans changement ; les nœuds qui mélangent ou sélectionnent entre les entrées peuvent réduire le poids ou bloquer les événements des entrées non primaires (voir la section Événement par nœud).
- Les événements marqueurs qui atteignent le sommet du graphique peuvent être observés via AnimationTrack:GetMarkerReachedSignal().
Clip

Une référence à un actif AnimationClip. Cela sert de nœud feuille dans le graphique, générant les données d'animation brutes qui alimentent d'autres nœuds pour le mélange, la sélection ou la modification.
- Entrées
- Aucune
- Propriétés
Propriété Type Description AnimationId String L'actif d'animation à jouer (par exemple, rbxassetid://12345). PlayMode Enum.AnimationNodePlayMode Définit le comportement du clip une fois qu'il atteint la fin de sa durée.
- Boucle (par défaut) : Redémarre automatiquement depuis le début une fois le clip terminé.
- PingPong : Joue du début à la fin, puis joue immédiatement à l'envers du fin au début.
- Une fois et Maintenir : Joue une fois et maintient la pose finale à la fin.
- Une fois et Réinitialiser : Joue une fois et revient à la pose de départ initiale à la fin.
Reverse Boolean Contrôle la direction de la lecture. Speed Number Un multiplicateur pour le taux de lecture. 0.0 met le graphique en pause, 1.0 est la vitesse normale, et 2.0 est la double vitesse. Trim Boolean Active ou désactive si la durée du clip doit être tronquée. TrimStart Number Le timestamp absolu (en secondes) où la lecture doit commencer. TrimEnd Number Le timestamp absolu (en secondes) où la lecture doit se terminer. - Données d'événement
- Gestion des événements : Aucune. C'est un nœud feuille sans enfants.
- Émission d'événements : Lit des marqueurs personnalisés intégrés dans le clip d'animation (par exemple, "Pas", "Balancement d'Arme") et les émet en tant qu'événements nommés au cadre précis où ils se produisent. Si le clip est tronqué, seuls les marqueurs dans l'intervalle défini [TrimStart, TrimEnd] (inclus) sont émis.
Select

Sélectionne entre n'importe quel nombre d'entrées via la propriété Sélection. Chaque fois que la sélection actuelle change, cela déclenche une nouvelle transition.
- Entrées
- Input1...InputN
- Propriétés
Propriété Type Description Selection String L'ID unique de l'entrée à sélectionner, correspondant au nom de la connexion d'entrée (par exemple, "Marche"). - Données d'événement
- Gestion des événements : Les événements de l'entrée actuellement sélectionnée passent avec leur poids inchangé.
- Émission d'événements : Passe tous les événements de l'entrée actuellement sélectionnée uniquement. Pendant une transition, l'émission d'événements suit les règles d'événements globaux.
PrioritySelect

Évalue une liste d'entrées connectées de haut en bas et joue la première dont la condition est évaluée à vrai. Cela permet une sélection d'animation hiérarchique basée sur une logique spécifique. Chaque fois que la sélection actuelle change, cela déclenche une nouvelle transition.
- Entrées
- Input1...InputN
- Trigger (Boolean) : Une condition logique qui doit être vraie pour que cette entrée s'active. Dans les versions actuelles, cela est relié à un paramètre booléen.
- TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible) : Définit la règle pour quand cette animation active peut être interrompue par une entrée de priorité supérieure. Remplace le paramètre DefaultInterruptible au niveau du nœud.
- Toujours (par défaut) : L'entrée peut être interrompue à tout moment par une condition de priorité supérieure.
- Terminé : L'animation actuelle doit terminer sa lecture avant qu'une entrée de priorité supérieure puisse prendre le relais.
- Trigger : L'entrée n'est interrompable que lorsque le InterruptibleTrigger est défini sur vrai.
- InterruptibleTrigger (Boolean) : Disponible uniquement si TransitionOverrideInterruptible est défini sur Trigger. L'entrée peut être interrompue lorsque cette expression spécifique est vraie.
- Propriétés
Propriété Type Description DefaultInterruptible Enum.AnimationNodeInterruptible La règle d'interruption de base appliquée à toutes les entrées. Chaque entrée peut remplacer cela avec sa propre propriété d'entrée TransitionOverrideInterruptible. - Données d'événement
- Gestion des événements : Les événements de l'entrée actuellement sélectionnée passent avec leur poids inchangé.
- Émission d'événements : Passe tous les événements de l'entrée actuellement sélectionnée uniquement. Pendant une transition, l'émission d'événements suit les règles d'événements globaux.
Sequence

Active les entrées connectées dans un ordre séquentiel spécifique basé sur des conditions d'attente définies. Chaque fois que la sélection actuelle change, cela déclenche une nouvelle transition.
- Entrées
- Input1...InputN
- TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor) : Spécifie la condition qui doit être remplie avant que la séquence avance à l'entrée suivante. Remplace le paramètre DefaultWaitFor au niveau du nœud.
- Terminé (par défaut) : Avance à l'entrée suivante lorsque l'entrée actuelle termine un cycle. Le comportement d'avancement dépend de l'entrée connectée :
- Clip à jouer une fois : Avance lorsque le clip se termine.
- Clip en boucle : Avance après qu'une boucle complète soit terminée.
- Séquence avec boucles infinies : Avance après un cycle complet à travers toutes les entrées.
- Séquence avec boucles finies : Avance après que toutes les boucles soient terminées.
- Trigger : Active l'entrée suivante lorsque une expression logique personnalisée est évaluée à vrai.
- WaitForTrigger (Boolean) : Disponible uniquement lorsque TransitionOverrideWaitFor est défini sur Trigger.
- Propriétés
Propriété Type Description LoopCount Number Le nombre de fois à parcourir l'ensemble de la séquence. Une valeur de 0 (par défaut) indique une boucle infinie. Une fois le compte atteint, le nœud respecte le paramètre de boucle ou de maintien de la dernière entrée. DefaultWaitFor Enum.AnimationNodeWaitFor La condition d'attente de base appliquée à toutes les entrées. Chaque entrée peut remplacer cela avec sa propre propriété d'entrée TransitionOverrideWaitFor. - Données d'événement
- Gestion des événements : Les événements de l'entrée actuellement active passent avec leur poids inchangé.
- Émission d'événements : Passe tous les événements de l'entrée actuellement active dans la séquence uniquement. Pendant une transition, l'émission d'événements suit les règles d'événements globaux.
RandomSequence

Sélectionne et joue l'une de ses entrées connectées au hasard. Lorsque l'animation actuellement sélectionnée se termine, le nœud choisit aléatoirement une autre entrée à jouer. Assignez à chaque entrée un poids spécifique pour influencer la probabilité de son choix. Chaque fois que la sélection actuelle change, cela déclenche une nouvelle transition.
- Entrées
- Input1...InputN
- Weight (Number) : Détermine la probabilité de cette entrée étant sélectionnée ; des poids plus élevés augmentent la chance de sélection.
- Propriétés
Propriété Type Description PlayCount Number Le nombre d'entrées que le nœud jouera avant de s'arrêter. Une fois atteint, le nœud respecte le paramètre de boucle ou de maintien de la dernière entrée. Par défaut, c'est 0 pour infini. Seed Number Une valeur utilisée pour initialiser le Générateur de Nombres Aléatoires (RNG), garantissant que la séquence reste cohérente à travers différents clients. Par défaut, c'est -1 pour une graine aléatoire. - Données d'événement
- Gestion des événements : Les événements de l'entrée actuellement active passent avec leur poids inchangé.
- Émission d'événements : Passe tous les événements de l'entrée actuellement active dans la séquence uniquement. Pendant une transition, l'émission d'événements suit les règles d'événements globaux.
Over

Superpose la pose Over sur la pose de Base. Lorsqu'elle est combinée avec un nœud Masque, les articulations masquées dans la pose Over révèlent entièrement la pose Base, créant un effet de superposition transparent.
- Entrées
- Base : La couche d'arrière-plan ou inférieure, typiquement une animation de corps entier comme locomotion ou un état d'inactivité.
- Over : La couche de premier plan ou supérieure à appliquer sur la base, comme un geste de main ou une animation d'utilisation d'outil.
- Propriétés
Propriété Type Description Weight Number Le poids de mélange utilisé pour atténuer la pose Over. Par défaut, c'est 1.0 (override complet) et n'est pas limité. - Données d'événement
- Gestion des événements :
- Le nœud écoute les événements des entrées Base et Over.
- Émission d'événements :
- Événements de Base : Tous les événements de l'entrée de Base sont passés sans modification.
- Événements de Over : Les événements de l'entrée Over sont mis à l'échelle par la propriété Poids.
- À Poids 0.5, les événements Over se propagent à moitié poids.
- À Poids 0, ils sont silencieux.
Add

Ajoute la pose Additive à la pose Base, atténuée par un Poids spécifique (non limité).
- Entrées
- Base : La pose d'animation principale.
- Additive : La pose à superposer à la base.
- Propriétés
Propriété Type Description Weight Number Détermine la force de la pose additive appliquée à la base. - Données d'événement
- Gestion des événements : Le nœud écoute les événements des entrées Base et Additive.
- Émission d'événements : Tous les événements des entrées Base et Additive sont passés sans modification.
Subtract

Convertit une animation en une pose additive en soustrayant une pose de base relative de la pose cible (). Le Poids met à l'échelle la pose B avant la soustraction (non limitée).
- Entrées
- A : La pose d'animation cible.
- B : La pose de base relative à soustraire.
- Propriétés
Propriété Type Description Weight Number Met à l'échelle la pose B avant qu'elle ne soit soustraite de A. À 1.0 (par défaut), B est entièrement soustraite ; à 0.0, aucune soustraction n'a lieu. - Données d'événement
- Gestion des événements : Le nœud écoute les événements des deux Input A et Input B.
- Émission d'événements : Tous les événements des deux Input A et Input B sont passés sans modification.
Blend1D

Interpole linéairement entre les deux poses d'animation les plus proches de la position d'entrée actuelle sur un seul axe.
- Entrées
- Input1...InputN
- Position (Number) : La coordonnée spécifique pour chaque entrée suivante sur l'axe de mélange.
- Propriétés
Propriété Type Description Position Number La valeur active actuelle sur l'axe de mélange utilisée pour échantillonner les animations. Si Position est en dehors de la plage des positions d'entrée définies, le nœud extrapole en utilisant les deux entrées les plus proches. PhaseSync Enum.AnimationNodePhaseSync Configure si le timing des entrées enfants doit être synchronisé.
- Synchronisé (par défaut) : Synchronisation normalisée. Le nœud calcule une "durée virtuelle" basée sur la moyenne pondérée des entrées actives. Chaque étape de temps du nœud d'entrée est ajustée pour que tous les enfants convergent vers la même phase, maintenant les animations de différentes longueurs en synchronisation.
- Non synchronisé : Mélange standard où les clips avancent indépendamment à leurs propres taux de lecture.
- Données d'événement
- Gestion des événements : Le nœud écoute les événements de tous les nœuds enfants actuellement actifs.
- Émission d'événements : Seuls les événements de l'entrée active à poids le plus élevé se propagent, mis à l'échelle par son poids de mélange. Les événements de l'entrée secondaire sont silencieux.
Blend2D

Mélange plusieurs poses d'animation ensemble en fonction de deux paramètres d'entrée dans un espace de coordonnées 2D. Cela généralise le nœud Blend1D pour gérer des scénarios complexes, tels que le mélange basé à la fois sur la direction de mouvement et la vitesse simultanément.
- Entrées
- Input1...InputN
- X (Number) : La coordonnée X pour chaque entrée suivante.
- Y (Number) : La coordonnée Y pour chaque entrée suivante.
- Propriétés
Propriété Type Description InputMode Enum.AnimationNodeBlend2DInputMode Définit le système de coordonnées utilisé pour évaluer l'espace de mélange :
- Cartésien (par défaut) : Utilise des coordonnées de grille 2D standard. X et Y représentent la position actuelle dans l'espace de mélange.
- Polaire : Utilise des valeurs angulaires et de magnitude. X représente la direction en radians, tandis que Y représente la magnitude ou la force de mouvement. La direction est pondérée plus lourdement que la magnitude, donc les entrées à des angles similaires mais à des magnitudes différentes se mélangent plus harmonieusement que les entrées à des angles différents.
X Number La coordonnée X actuelle (cartésienne) ou Direction en radians (polaire). Y Number La coordonnée Y actuelle (cartésienne) ou Magnitude (polaire). PhaseSync Enum.AnimationNodePhaseSync Configure si le timing des entrées enfants doit être synchronisé.
- Synchronisé (par défaut) : Synchronisation normalisée. Le nœud calcule une "durée virtuelle" basée sur la moyenne pondérée des entrées actives. Chaque étape de temps du nœud d'entrée est ajustée pour que tous les enfants convergent vers la même phase, maintenant les animations de différentes longueurs en synchronisation.
- Non synchronisé : Mélange standard où les clips avancent indépendamment à leurs propres taux de lecture.
- Données d'événement
- Gestion des événements : Le nœud écoute les événements de tous les nœuds enfants actuellement actifs.
- Émission d'événements : Seuls les événements de l'entrée active à poids le plus élevé se propagent, mis à l'échelle par son poids de mélange. Les événements de l'entrée secondaire sont silencieux.
Mask

Applique un masque prédéfini à la pose d'entrée. Un masque est défini par un poids par objet (par exemple, articulation) dans la hiérarchie du rig, permettant un contrôle précis ou un "flou" de l'animation.
- Entrées
- Pose : La pose d'animation à masquer.
- Propriétés
Propriété Type Description Mask ObjectValue Un ObjectValue (créé comme un enfant direct de la définition de nœud d'animation Mask) qui définit les poids de masque. Il peut fonctionner de deux manières :
- Directement : Le ObjectValue lui-même contient des attributs mappant les noms d'objets du rig à des valeurs de poids spécifiques.
- Par Référence : Le ObjectValue référence une autre Instance qui contient les attributs de mappage. Cela permet d'utiliser des masques partagés à travers différents nœuds dans le graphique.
Lors de la création d'un masque, vous pouvez choisir un schéma de rig (HumanoidRigDescription ou Picker) pour peupler la hiérarchie.
- HumanoidRigDescription : Standardise le masque pour les personnages humanoïdes.
- Picker : Permet à l'utilisateur de sélectionner un rig spécifique dans l'espace de travail pour peupler la hiérarchie du masque.
Invert Boolean Lorsque vrai, applique les valeurs de poids comme 1 - poids. Cela permet de réutiliser un masque de manière inverse sans créer un nouvel actif. - Données d'événement
- Gestion des événements : Le nœud écoute tous les événements de l'entrée Pose.
- Émission d'événements : Tous les événements de l'entrée Pose sont passés sans modification.
Speed

Modifie le taux de lecture d'une pose d'animation entrante.
- Entrées
- Pose : La pose d'animation ou sous-graphique dont la vitesse de lecture sera modifiée.
- Propriétés
Propriété Type Description Speed Number Un multiplicateur appliqué à l'intervalle de temps (). 0.0 met le graphique en pause, 1.0 est la vitesse normale, et 2.0 est la double vitesse. - Données d'événement
- Gestion des événements : Le nœud écoute les événements de l'entrée Pose.
- Émission d'événements : Tous les événements de l'entrée Pose sont passés sans modification. Notez que bien que la vitesse de lecture visuelle change, le timing des événements émis (tels que les marqueurs) sera mis à l'échelle en conséquence avec le taux de lecture modifié.
GraphOutput

Représente la pose finale évaluée du graphique. Ce nœud est automatiquement inclus dans tous les nouveaux graphiques dans l'Éditeur de Graphique d'Animation. Sa présence garantit que le graphique est toujours valide et produit de manière cohérente une pose d'animation.
- Entrées
- Pose : Les données d'animation finales à appliquer au rig.
- Propriétés
- Aucune
- Données d'événement
- Gestion des événements : Le nœud écoute tous les événements passés par l'entrée connectée finale.
- Émission d'événements : Ce nœud sert de point de sortie pour le pipeline d'animation et n'émet pas de signaux de retour dans le graphique.
Transitions
Plusieurs nœuds dans le Graphique d'Animation (comme Select, Priority Select, Sequence, et Random Sequence) gèrent comment les animations se mélangent lors du passage entre les entrées actives. Pour éviter la redondance dans la référence des nœuds, ces comportements sont définis par des groupes de propriétés de transition standardisés.
Transition par défaut

Le comportement de mélange de base appliqué au nœud chaque fois qu'il passe à une nouvelle entrée active.
- DefaultTransitionDuration (nombre) : Le temps (en secondes) qu'il faut pour se fondre complètement dans la nouvelle pose.
- DefaultTransitionCurve (Enum.PoseEasingStyle) : La fonction d'assouplissement appliquée pendant le mélange. Actuellement, ne prend en charge que Enum.PoseEasingStyle.Linear et Enum.PoseEasingStyle.CubicV2.
Surcharge de transition
Propriétés de lien spécifiques à l'entrée qui remplacent la transition par défaut. Celles-ci sont appliquées lorsque le nœud passe à cette entrée spécifique.
- TransitionOverrideDuration (nombre) : Remplace la durée de transition par défaut.
- TransitionOverrideCurve (Enum.PoseEasingStyle) : Remplace la courbe de transition par défaut. Actuellement, ne prend en charge que Enum.PoseEasingStyle.Linear et Enum.PoseEasingStyle.CubicV2.
Réplication
Les paramètres du graphique d'animation et l'état interne des nœuds se répliquent automatiquement. Le mode de réplication est déterminé par Workspace.AuthorityMode au moment où le script Animate est créé :
- Dans Enum.AuthorityMode.Automatic : Les paramètres définis via AnimationTrack:SetParameter() se répliquent automatiquement vers d'autres pairs.
- Dans Enum.AuthorityMode.Server : Le serveur pilote la simulation complète du graphique. Tous les états des nœuds, tels que le temps écoulé pour Enum.AnimationNodeType.ClipNode, et les paramètres du graphique se répliquent automatiquement du serveur aux clients. Le client du joueur propriétaire utilise la prédiction pour une lecture locale fluide.
Exemples de Scripts Animate
Pour générer des scripts d'exemple pour piloter un graphique d'animation pour un rig, utilisez Graph -> Créer un script Animate dans l'Éditeur de Graphique d'Animation. Cela produit une hiérarchie de script placée sous StarterCharacterScripts (pour les personnages joueurs) ou directement sur le rig (pour les PNJ) :
Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)Le Animate ModuleScript contient la logique de chargement du graphique. Les scripts RunClient et RunServer l'invoquent dans le contexte approprié. Les scripts inclus dépendent du cas d'utilisation :
| Cas d'utilisation | Scripts inclus | Comportement |
|---|---|---|
| PNJ (n'importe quel mode) | RunServer | Le serveur charge et joue le graphique. L'état se réplique automatiquement à tous les clients. |
| Joueur + Enum.AuthorityMode.Server | RunServer + RunClient | Le serveur pilote le graphique de manière autoritaire. Le client propriétaire active Enum.PredictionMode pour la prédiction locale basée sur le rollback. |
| Joueur + Enum.AuthorityMode.Automatic | RunClient | Le client propriétaire charge et joue le graphique. Les paramètres se répliquent automatiquement vers le serveur et d'autres clients. |
Les attributs suivants sont stockés sur le script Animate et configurent son comportement :
| Attribut | Type | Description |
|---|---|---|
| GraphName | String | Nom de l'actif de graphique d'animation. |
| CharacterName | String | Nom du rig que le graphique cible. |
| SourceAssetId | String | L'ID d'Actif publié du graphique. Utilisé à l'exécution dans les jeux publiés. |
| IsServerAuthority | Boolean | Indique si le script a été créé avec Workspace.AuthorityMode défini sur Server. Détermine la stratégie de réplication. |
| PreviewInStudio | Boolean | Lorsque vrai (par défaut), le test de jeu dans Studio charge le graphique non publié localement afin que vous puissiez itérer sans publier. Définissez sur faux pour tester l'actif publié dans Studio. Notez que cela n'est actuellement pas pris en charge dans Enum.AuthorityMode.Server. |
Réplication des paramètres en mode automatique
Lorsque Workspace.AuthorityMode est Automatique :
- Le client propriétaire pilote les graphiques des personnages joueurs ; le serveur pilote les graphiques des PNJ.
- Les paramètres définis via AnimationTrack:SetParameter() se répliquent automatiquement vers d'autres pairs. Plusieurs appels SetParameter dans une seule image sont coalisés (dernier écrivain gagne).
- Aucun script supplémentaire n'est nécessaire pour le transport des paramètres — le moteur gère la réplication en interne.
- D'autres clients voient les mises à jour des paramètres avec un léger retard (un intervalle d'envoi plus la latence réseau).
Autorité du serveur
Lorsque Workspace.AuthorityMode est Serveur :
- Le serveur est autoritaire pour tous les graphiques — il exécute la simulation et réplique l'état complet du graphique.
- Ce qui est répliqué : À la fois les paramètres et l'état interne des nœuds, y compris le temps écoulé, les sélections actuelles, la progression des transitions, les comptes de boucle et les graines RNG. Cela garantit que tous les clients voient un comportement d'animation identique.
- Personnages joueurs : Le serveur pilote le graphique. Le script RunClient du client propriétaire active automatiquement Enum.PredictionMode sur le Animator, de sorte que le joueur local voit une animation fluide et prédite qui se réconcilie avec le serveur en cas de désaccord.
- PNJ : Le serveur pilote exclusivement le graphique ; les clients observent l'état répliqué sans simulation locale.
Pilotage des paramètres
Utilisez AnimationTrack:SetParameter() depuis chaque script qui exécute le graphique :
- PNJ (n'importe quel mode) : Appelez SetParameter depuis RunServer (ou tout Script serveur ayant accès au AnimationTrack).
- Personnage joueur en Enum.AuthorityMode.Server : Appelez SetParameter depuis RunServer et RunClient. Le serveur a besoin de paramètres pour piloter la simulation autoritaire, et le client propriétaire a besoin des mêmes paramètres pour piloter sa prédiction locale.
- Personnage joueur en Enum.AuthorityMode.Automatic : Appelez SetParameter depuis RunClient (ou tout LocalScript client ayant accès au AnimationTrack).
Le script Animate généré inclut un bloc SetParameter commenté comme point de départ. Décommentez et modifiez-le pour piloter les paramètres à partir de l'état de jeu (vitesse de mouvement, état humanoïde, direction d'entrée, etc.).