Jouer des animations de personnage

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Jouer des animations de personnage est une partie importante de ce qui rend les avatars et les personnages non jouables (NPC) expressifs, réalistes et engageants pour votre public.En plus de fournir des visualisations immersives, les animations de personnage fournissent aux joueurs des commentaires sur leurs actions, des conseils sur la façon de naviguer dans l'environnement et des informations vitales sur leur personnage et sur les autres.

En utilisant le fichier Station spatiale dangereuse.rbxl comme référence, ce tutoriel vous montre comment jouer des animations de personnages en utilisant deux techniques différentes, y compris des directives sur :

  • Échange des ID d'animation de personnage par défaut avec vos propres animations personnalisées.
  • Activer des 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 des animations pour une grande variété de situations de jeu.

Changer les animations par défaut

Chaque personnage avec un objet par défaut Humanoid par défaut, que ce soit un avatar contrôlé par le joueur ou un personnage non joueur (NPC), inclut une série d' animations par défaut qui se jouent chaque fois que le personnage effectue des actions spécifiques dans l'expérience, telles que la course, l'escalade et le saut.Roblox fournit ces animations out-of-the-box pour chaque expérience sans effort de scriptage supplémentaire.

Animation de chute par défaut
>

Animation de nage par défaut
>

Animation d'escalade par défaut
>

Cependant, si ces animations par défaut ne répondent pas aux exigences de conception pour l'environnement, l'esthétique ou la narration globale 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 personnels, engageants et immersifs.

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 de Créer des animations de personnage.En utilisant le même processus, vous pouvez échanger n'importe quelle des animations par défaut avec vos propres ressources d'animation.

Animation de marche par défaut
>

Animation de marche personnalisée
>

Créer un script

Chaque objet de caractère Humanoid inclut un objet enfant Animator qui stocke toutes les animations par défaut du personnage.Pour définir l'une de ces animations par défaut à de nouveaux ID d'actif, vous devez créer un script dans le Class.ServiceScriptService afin qu'il puisse référencer et annuler les valeurs par défaut de l'objet Animator dès que les joueurs se chargent dans l'expérience.

Pour créer un script qui fera référence aux ressources d'animation par défaut :

  1. Dans la fenêtre Explorateur , ajoutez un nouveau script à ServerScriptService .

    1. Passez la souris sur ServerScriptService et cliquez sur le bouton ⊕.
    2. Dans le menu contextuel, insérez un script .
  2. 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!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.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 onCharacterAdded attends jusqu'à ce qu'il détecte les objets Humanoid et Animator du personnage.

Lorsqu'il détecte un objet Animator pour la première fois, le script imprime ensuite "Animator found!" pour vous informer que le script fonctionne comme prévu.

Remplacer l'ID de ressource

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 faire référence spécifiquement à l'animation id(s) que vous voulez échanger avec vos propres animations personnalisées.

La table suivante contient toutes les animations de caractères par défaut que vous pouvez appeler et remplacer dans l'objet Animator.Notez que Idle a deux variations que vous pouvez programmer pour jouer plus ou moins fréquemment.

Action de caractèreRéférence de script d'animation
Exécuter animateScript.run.RunAnim.AnimationId
Marche animateScript.walk.WalkAnim.AnimationId
Saut animateScript.jump.JumpAnim.AnimationId
Inactif

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

Tombée animateScript.fall.FallAnim.AnimationId
Nager

animateScript.swim.Swim.AnimationId

Nager (inactif)

animateScript.swimidle.SwimIdle.AnimationId

Montée animateScript.climb.ClimbAnim.AnimationId

Pour remplacer l'ID d'animation de marche par défaut :

  1. Appellez la référence de script d'animation de marche par défaut, puis remplacez l'ID de la ressource par votre propre ID d'animation personnalisée.Par exemple, l'exemple de code suivant fait référence à l'animation de cycle de marche de Créer des animations de personnage.


    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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Testez votre expérience pour vous assurer que votre animation de marche personnalisée remplace l'animation par défaut.

    1. Dans la barre d'outils, cliquez sur le bouton Jouer . Studio entre en mode de test de jeu.

      Play button highlighted in Studio's playtesting options.
    2. Promenez-vous autour de la station spatiale avec votre avatar.

Activer les animations

Bien que la technique précédente se concentre sur le remplacement des animations par défaut qui se jouent automatiquement chaque fois qu'un personnage effectue des actions spécifiques dans l'expérience, vous pouvez déclencher des animations de manière programmatique en réponse à n'importe quelle action de personnage dans l'espace 3D, telles que la récupération d'un objet ou le reçu de dommages d'un danger.

Dans cet exemple, lorsque les joueurs touchent la plate-forme dorée, ils déclenchent une animation de danse de personnage non par défaut.

Cette méthode de lecture d'animations est utile car elle fournit aux joueurs des commentaires instantanés sur la façon dont ils doivent interagir avec des objets dans leur environnement.Pour démontrer, la section suivante vous montre comment déclencher une animation chaque fois que les personnages sont trop proches des fuites de vapeur dangereuses comme moyen de subtilement enseigner aux joueurs d'éviter de se promener trop près des murs.

Insérer volume

L'une des façons les plus courantes de déclencher un comportement de jeu unique est d'utiliser volumes ou des 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 couplez des 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 lancement d'une animation.

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.
Le mystère de Duvall Drive utilise des volumes pour déclencher des événements de jeu qui modifient l'apparence visuelle de la pièce.

Lors de l'ajout d'un volume à votre expérience, il est important de l'écheler afin qu'il ne couvre que l'espace que vous voulez déclencher votre animation.Si vous rendez votre volume trop petit, les joueurs peuvent ne jamais collider avec la zone pour jouer l'animation ; à l'inverse, si vous rendez votre volume trop grand, l'animation se jouera avant que les joueurs atteignent l'élément ou la zone d'intérêt, et ils peuvent ne pas comprendre ce qu'ils ont fait pour déclencher l'animation.

Pour insérer un volume autour d'une fuite de vapeur qui déclenchera une animation :

  1. Dans la fenêtre Explorateur , ajoutez une nouvelle partie de bloc.
  2. Positionnez et redimensionnez le bloc jusqu'à ce qu'il couvre la zone que vous voulez déclencher votre animation.
  3. Dans la fenêtre propriétés ,
    1. Définir nom à détecteur d'animation .

    2. Définissez Transparence à 1 pour rendre le bloc invisible.

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

Créer un script

Maintenant que vous avez une région définie pour déclencher votre animation, il est temps de créer un script qui détecte automatiquement chaque fois que les joueurs se heurtent au volume.Vous pouvez ensuite écouter les événements de collision pour déclencher toute animation qui ait du sens pour vos exigences de jeu.

Par exemple, cette technique d'animation utilise un LocalScript au lieu d'un Script pour fournir aux joueurs un retour immédiat lorsqu'ils se heurtent au volume.Si le serveur écoutait la collision et jouait l'animation, il pourrait y avoir un délai entre le moment où le joueur touche le volume sur son client et voit l'animation jouer en raison du 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 :

  1. Dans la fenêtre Explorateur , ajoutez un nouveau script à StarterCharacterScripts .Ce placement garantit que le script et ses enfants se clonent dans le personnage du joueur lors de la rejoindre et lorsqu'ils réapparaissent dans l'expérience.

    1. Développez StarterPlayer , puis passez la souris sur son enfant StarterCharacterScripts et cliquez sur le bouton ⊕.
    2. Dans le menu contextuel, insérez un LocalScript et renommez-le TriggerAnimation .
  2. 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 = 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)

Le script TriggerAnimation commence par obtenir le service Workspace, qui contient tous les objets qui existent dans le monde 3D.C'est important parce que le script doit référencer l'objet Part agissant en tant que volume.

Pour chaque personnage de joueur qui se charge ou réapparaît dans l'expérience, le script attend :

  • Son objet enfant Animation, que vous ajouterez dans la section suivante.
  • Les objets Humanoid et Animator du personnage.
  • L'objet de volume dans l'espace de travail nommé AnimationDetector .

Lorsque quelque chose se heurte au volume, la fonction de gestionnaire d'événement Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui a collidé avec le volume est un descendant d'un modèle de personnage.Si c'est le cas, la fonction vérifie ensuite si le est le personnage du joueur local.Si c'est le cas, la fonction alors :

  • Défini le débounce à true .
  • Joue et attend la fin de l'animation.
  • Défini le débounce de retour à false .

L'ajustement du décalage de false à true à false de nouveau après la fin de l'animation empêche l'animation de se déclencher à nouveau à plusieurs reprises car les joueurs se heurtent en permanence au volume.Pour plus d'informations sur ce modèle de débounce, voir Détecter les collisions .

Ajouter une animation

Si vous deviez tester votre expérience en ce moment, votre script TriggerAnimation ne serait toujours pas capable de jouer une animation en réponse à la collision du volume local du joueur.C'est parce qu'il attend un objet enfant Animation avec une ressource d'animation qu'il peut référencer, et que cet objet Animation n'existe pas actuellement.

Pour ajouter une animation pour le script local à référencer lorsque les joueurs se heurtent au volume :

  1. Dans la fenêtre Explorateur , ajoutez une nouvelle animation à TriggerAnimation .

    1. Passez la souris sur Animation d'activation et cliquez sur le bouton ⊕.
    2. Dans le menu contextuel, insérez une animation .
  2. Sélectionnez l'objet d'animation nouveau, puis dans la fenêtre Propriétés , définissez AnimationID sur l'ID d'animation que vous voulez déclencher lorsque les joueurs touchent le volume.Par exemple, les références d'échantillon de la station spatiale dangereuse jouent une animation d'un personnage qui tombe en arrière.

  3. Testez votre expérience pour vous assurer que votre animation joue lorsque les joueurs sont près de la première fuite de vapeur.