Animer des animations de personnages est une partie importante de ce qui rend les avatars et les personnages non jouables (NPC) expressifs, réalistes et engageants pour votre audience. En plus de fournir des visuels immersifs, les animations de personnages fournissent aux joueurs des commentaires sur leurs actions, des conseils sur la navigation dans l'environnement et des informations vitales sur leur personnage et d'autres.
En utilisant le Hazardous Space Station.rbxl fichier comme référence, ce tutoriel vous montre comment jouer les animations de personnages en utilisant deux techniques différentes, y compris les instructions sur :
- Échange des ID d'animation du personnage par défaut avec vos propres animations personnalisées.
- Activer les animations en réponse aux actions du personnage dans l'espace 3D.
Après avoir terminé ce tutoriel, vous aurez les compétences pour personnaliser les animations pour une gamme de situations de jeu.
Modifier les animations par défaut
Chaque personnage avec un objet par défaut Humanoid , qu'il s'agisse d'un avatar contrôlé par un joueur ou d'un personnage non joueur (PNJ), inclut un ensemble de animations par défaut qui s'exécute toujours lorsque le personnage effectue des actions spécifiques dans l'expérience, telles que la course, l'escalade et le saut. Roblox fournit ces animations en dehors
Cependant, si ces animations par défaut ne répondent pas aux exigences de conception pour l'environnement, l'esthétique ou la narration de votre monde, vous pouvez les échanger avec des animations personnalisées qui s'appliquent à chaque joueur qui rejoint votre expérience. Cette technique de conception de jeu peut aider vos personnages et vos expériences à se sentir plus personnalisées, plus engageantes et plus immersif.
Pour démontrer, la section suivante vous apprend à échanger l'animation de marche par défaut avec une animation de cycle de marche personnalisée à partir de Créer des animations de personnages . En utilisant ce même processus, vous pouvez échanger n'importe quelle des animations par défaut avec vos propres ID d'animation.
Créer un script
Tous les objets Humanoid de chaque personnage incluent un objet enfant Animator qui stocke toutes les animations par défaut du expérience. Pour configurer l'une de ces animations par défaut, vous devez créer un script dans le Class.ServiceScriptService afin qu'il puisse référencer et écraser les
Pour créer un script qui référencera les ID d'animation par défaut :
Dans la fenêtre Explorateur , ajoutez un nouveau script à ServerScriptService .
- Survolez ServerScriptService et cliquez sur le bouton ⊕.
- Dans le menu contextuel, insérez un Script .
Dans le nouveau script, collez le code suivant :
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)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Le script ResetDefaultAnimations commence par obtenir le service Players, qui contient tous les objets Player pour les joueurs lorsqu'ils se connectent à un serveur. Lorsque chacun des personnages du joueur se charge dans l'expérience, la fonction
Lorsqu'il détecte pour la première fois un objet Animator , le script imprime alors « Animator trouvé ! » pour vous informer que le script fonctionne comme prévu.
Remplacer AssetID
Maintenant que vous savez que votre script est capable de détecter quand les joueurs se chargent et se connectent au serveur, vous pouvez modifier votre script pour référencer spécifiquement l'ID de l'animation que vous souhaitez échanger avec vos propres animations personnalisées.
Le tableau suivant contient toutes les animations de personnage par défaut que vous pouvez appeler et remplacer dans l'objet Animator. Remarquez que Idle a deux versions que vous pouvez programmer pour jouer plus ou moins souvent.
Action personnage | Référence d'animation du script |
Exécuter | animateScript.run.RunAnim.AnimationId |
Marchez | animateScript.walk.WalkAnim.AnimationId |
Sauter | animateScript.jump.JumpAnim.AnimationId |
Inactif | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Chute d'automne | animateScript.fall.FallAnim.AnimationId |
Nager | animateScript.swim.Swim.AnimationId |
Nager (Inactif) | animateScript.swimidle.SwimIdle.AnimationId |
Escaladez | animateScript.climb.ClimbAnim.AnimationId |
Pour remplacer l'ID de ressource d'animation de marche par défaut :
Appuyez sur la référence de script d'animation de marche par défaut, puis remplacez le script d'animation de marche par votre propre ID d'animation personnalisé. Par exemple, le code suivant se réfère à l'animation de cycle de marche à partir de Créer des animations de personnages .
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)endPlayers.PlayerAdded:Connect(onPlayerAdded)Testez votre expérience pour vous assurer que votre animation de marche personnalisée est en mesure de remplacer l'animationspar défaut.
Dans la barre de menu, cliquez sur le bouton Jouer . Studio entre en mode playtest.
Marchez autour de la station spatiale avec votre avatar.
Activer les animations
Bien que la technique précédente se concentre sur l'échange des animations par défaut qui s'exécutent automatiquement chaque fois qu'un personnage effectue des actions spécifiques dans l'expérience, vous pouvez programmer des animations pour s'exécuter en réponse à n'importe quelle action de personnage dans l'espace 3D, telle qu'un ramassage d'un objet ou un dommage d'un danger.
Cette méthode de jouer aux animations est utile parce qu'elle fournit aux joueurs des commentaires instantanés sur la façon dont ils devraient interagir avec les objets dans leur environnement. Pour démontrer, la section suivante vous montre comment déclencher une animation chaque fois que les joueurs sont trop près des fuites de vapeur dangereuses comme une façon de subtement apprendre aux joueurs à éviter de marcher trop près des murs.
Insérer le volume
L'une des façons les plus courantes de déclencher un comportement de jeu unique est d'utiliser les volumes , ou les régions invisibles dans l'espace 3D, pour détecter quand les personnages ou les objets interagissent avec des zones spécifiques de l'environnement. Lorsque vous combinez les volumes avec des scripts, vous pouvez utiliser leur retour de collision pour déclencher automatiquement des actions, telles que la réduction de la santé du joueur ou le jouement d'une animations.
Lors de l'ajout d'un volume à votre expérience, il est important de le mettre à l'échelle pour qu'il ne couvre que l'espace que vous souhaitez couvrir par votre animations. Si vous faites de votre volume trop petit, les joueurs ne pourront peut-être jamais coller avec la zone pour jouer l'animations; au contraire, si vous faites de votre volume trop grand, l'animation s'exécutera avant que les joueurs atteignent la zone ou l'objet d'intérêt, et ils pourraient
Pour insérer un volume autour d'une fuite de vapeur qui déclenchera une animations:
- Dans la fenêtre Explorateur , ajoutez une nouvelle partie de bloc.
- Placez et redimensionnez le bloc jusqu'à ce qu'il couvre la zone que vous voulez déclencher votre animations.
- Dans la Fenêtre propriétés ,
Définir nom à détecteur d'animation .
Définir la transparence à 1 pour rendre le bloc invisible.
Créer un script
Maintenant que vous avez une région définie pour déclencher votre animations, il est temps de créer un script qui détecte automatiquement chaque fois que les joueurs se heurtent au volume. Vous pouvez alors écouter les événements de collision pour déclencher n'importe quelle animation qui a du sens pour vos exigences de jeu.
Par exemple, cette technologie d'animation utilise un LocalScript au lieu d'un Script pour fournir aux joueurs un retour immédiat lorsqu'ils collent avec le volume. Si le serveur écoutait la collision et jouait l'animations, il pourrait y avoir un décalage entre le joueur touchant le volume sur son client et voyant l'animation jouer en raison du délai entre le temps de réplication du serveur au client.
Pour créer un script local qui détectera quand le personnage du joueur local touchera le volume :
Dans la fenêtre Explorer , ajoutez un nouveau script à StartercharacterScripts . Ce placement garantit que le script et ses enfants se clonent dans le personnage du joueur lors de l'ajout et lorsqu'ils réapparaissent dans l'expérience.
- Expand StarterPlayer , then hover over its StartercharacterScripts child and click the ⊕ button.
- Dans le menu contextuel, insérez un LocalScript et renommez-le en TriggerAnimation.
Dans le nouveau script, collez le code suivant :
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)
Le script Workspace commence par obtenir le service Part, qui contient tous les objets qui existent dans le monde 3D. C'est important car le script doit référencer l'objet 1>Class.Part1> agissant comme votre volume.
Pour chaque personnage de joueur qui se recharge ou réapparaît dans l'expérience, le script attend :
- Son objet enfant Animation, que vous ajouterez dans la prochaine section.
- L'objet de volume dans l'espace de travail nommé AnimationDetector .
Lorsque quelque chose se heurte au volume, le Touched événement hôte du gestionnaire du volume obtient le premier ancêtre qui est un Model, ce qui devrait être le personnage si le BasePart qui s'est heurté au volume est un descendant d'un modèlisation
- Définit le rebond à true .
- Joue et attend que l'animation se terminer.
- Définit le rebondage de retour à false .
Définir le rebond de false à true à false après la fin de l'animation est un modèle de rebond qui empêche l'animation de se déclencher à nouveau après que les joueurs colligent en continu avec le volume. Pour plus d'informations sur ce modèle de rebond, voir 1>Détection des collisions1>.
Ajouter une animation
Si vous testiez votre expérience en ce moment, votre script TriggerAnimation ne pourrait toujours pas jouer une animation en réponse à la collision du volume du joueur local. C'est parce qu'il attend un objet enfant Animation avec un élément d'animation qui peut référencer, et que cet élément Animation n'existe pas actuellement.
Pour ajouter une animation pour le script local à référencer lorsque les joueurs se heurtent au volume :
Dans la fenêtre Explorateur , ajoutez une nouvelle animation à TriggerAnimation .
- Survolez TriggerAnimation et cliquez sur le bouton ⊕.
- Dans le menu contextuel, insérez une animation .
Sélectionnez le nouvel objet d'animation, puis dans la fenêtre propriétés , définissez AnimationID sur le paramètre de l'animation que vous souhaitez déclencher lorsque les joueurs touchent le volume. Par exemple, l'échantillon Hazardous Space Station se réfère à 1> rbxassetid://37164687741> pour jouer une animation d'un personnage
Testez votre expérience pour vous assurer que votre animation joue quand les joueurs sont près de la première fuite de vapeur.