IKControl
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Les instances IKControl génèrent des poses d'animation procédurale en utilisant la kinématique inversée (IK).Ils vous permettent de faire réagir les personnages de manière réaliste à leur environnement.
Par exemple, vous pouvez faire en sorte qu'un personnage place sa main sur une poignée de porte exactement, et le personnage le fera indépendamment de sa position.Les contrôles IK fournissent l'avantage de devoir créer beaucoup moins d'animations pour votre jeu tout en donnant à votre expérience un sentiment plus réaliste et poli.
IKControls doit être un enfant d'un Humanoid ou AnimationController avec un Animator et avoir toutes leurs propriétés requises définies correctement, sinon ils n'ont aucun effet.Les propriétés requises sont Type , EndEffector , Target , ChainRoot .Dès que celles-ci sont définies, le modèle IkControl modifie la pose de votre personnage comme vous le spécifiez.L'exemple de code suivant montre comment configurer votre première IKControl et commencer à créer des animations plus réalistes pour votre jeu.
Vous pouvez utiliser les contrôles IK pour créer un personnage :
- Fait tourner sa tête et son torse pour regarder un point d'intérêt dans le monde.
- Modifiez ses positions de pieds pour répondre au terrain dynamique. Ajustez ses jambes et ses pieds pour les placer ensuite sur le terrain avec des roches et des pentes.
- Maintenez une arme et placez ses mains de manière appropriée sur la poignée sans avoir besoin de créer des animations pour chaque arme dans le jeu.
- Visez un point dans le monde, afin que le bout du canon pointe exactement sur ce que vous voulez tirer. Particulièrement utile dans les tireurs à la troisième personne.
- Mettez vos mains sur le volant d'une voiture et suivez-la lorsqu'elle tourne.
- Beaucoup plus !
IKControl annulera l'animation pour toutes les parties entre le ChainRoot et le EndEffector .Vous pouvez l'activer/désactiver en utilisant Enabled ou modifier la quantité d'effet qu'ils ont sur l'animation sous-jacente en utilisant le Weight .Faites attention : si vous ne configurez pas correctement votre IKControls, vous pourriez générer des poses mauvaises et irréalistes !
Échantillons de code
This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.
local character = script.Parent.Character
local humanoid = character.Humanoid
local root = character.HumanoidRootPart
-- Create a new attachment to use as the IKControl.Target
local target = Instance.new("Attachment")
target.CFrame = CFrame.new(-1, 0, -1)
target.Parent = root
local ikControl = Instance.new("IKControl")
ikControl.Type = Enum.IKControlType.Position
ikControl.EndEffector = character.LeftHand
ikControl.ChainRoot = character.LeftUpperArm
ikControl.Target = target
ikControl.Parent = humanoid
Résumé
Propriétés
La dernière partie dans laquelle vous êtes intéressé pour déplacer votre personnage.Par exemple, le bras supérieur.Doit être un ancêtre de EndEffector et être un BasePart ou un Bone dans votre personnage.
Bascule le contrôle en et off. Vrai par défaut.
La partie dans laquelle vous êtes intéressé à déplacer pour atteindre le Target.Par exemple, la main de votre personnage.Doit être un descendant de ChainRoot et être un BasePart ou un Bone dans votre personnage.
Un décalage supplémentaire appliqué en plus du EndEffector dans son espace local pour changer où il se déplace.
Un décalage supplémentaire appliqué en plus du Target pour changer où se déplacent les EndEffector .
Une instance facultative qui détermine dans quelle direction la chaîne se courbe. Vous pouvez l'utiliser pour spécifier dans quelle direction un coude ou une genou se courbe.
Spécifie l'ordre dans lequel les contrôles sont résolus. Les valeurs plus élevées ont une priorité plus élevée.
Spécifie le nombre moyen de secondes qu'il faut pour que le EndEffector atteigne sans problème le Target.
L'objet auquel le EndEffector atteint ou pointe.Cela peut être tout ce qui a une position dans le monde, comme BasePart , Attachment , Bone ou Motor6D .
Spécifie comment le solveur satisfait ce contrôle.
Spécifie le poids de la cible de contrôle IK. Doit être dans la plage [0, 1].
Méthodes
Propriétés
ChainRoot
En précisant un ChainRoot et un EndEffector , vous instruisez le IKControl qu'il est autorisé de déplacer et de tourner toutes les parties entre les deux pour déplacer le EndEffector vers le Target .Par exemple, si vous spécifiez la main gauche comme EndEffector et le bras supérieur gauche comme ChainRoot, le contrôle déplace 3 parties : la main gauche, le bras inférieur gauche et le bras supérieur gauche.Évitez de définir ChainRoot comme racine réelle du personnage car cela produit des résultats irréalistes.
Enabled
Cette propriété vous permet de basculer le contrôle IK allumé et off.C'est activé par défaut.Lorsque Enabled est faux, le contrôle IK est désactivé et n'est pas résolu par le solveur sous-jacent.
EndEffector
La EndEffector décrit la dernière partie de la chaîne de votre personnage que vous voulez affecter.Par exemple, cela pourrait être la main lorsque vous voulez déplacer tout le bras pour atteindre un point.Il peut s'agir d'un BasePart sur un caractère, qui a un Motor6D comme enfant, un Motor6D directement, un Bone ou un Attachment .Le pivot de la sélection EndEffector se déplace vers le Target, vous pouvez donc utiliser Attachments pour modifier le point d'un BasePart qui devrait atteindre le Target .
EndEffectorOffset
L'offset de l'effet final est un supplément de appliqué en plus du qui produit le final utilisé pour placer le .Par défaut, c'est le CFrame d'identité, donc si vous ne le définissez pas, il n'a aucun effet et le EndEffector utilise le Target``Datatype.CFrame directement, ce qui est spécifié dans l'espace local du EndEffector .
Alternativement, vous pouvez utiliser des pièces jointes en définissant une pièce jointe comme EndEffector , qui la déplace vers Target au lieu des parties auxquelles elle est attachée, obtenant effectivement le même resultats.
Vous pouvez également utiliser EndEffectorOffset pour modifier sur quel axe du EndEffector la pointe devrait se diriger vers le Target lors de l'utilisation de LookAt comme Type .
Offset
L'offset est un supplément de appliqué en plus du qui produit le final utilisé pour placer le .C'est son identité par défaut, donc si vous ne le définissez pas, il n'a aucun effet et le EndEffector utilisera directement le Target``Datatype.CFrame .Vous pouvez l'animer pour créer des animations procédurales telles que le tapotage sur un clavier.C'est utile lorsque les Target et EndEffector ne sont pas alignés et que vous devez les corriger avec une rotation ou une traduction supplémentaire.
Pole
Le Pole est une option Instance qui vous donne le contrôle sur la façon dont les parties intermédiaires de votre personnage doivent se courber.Cela peut être tout ce qui a une position dans le monde, comme BasePart , Attachment , Bone , Motor6D .Par défaut, c'est nil.Lorsque vous le spécifiez, le solveur sous-jacent fera en sorte que les parties se plient vers lui.Lorsqu'il est nil, le solveur essaiera de faire en sorte que les coudes et les genoux se plient correctement en fonction de la jambe du personnage.La jambe sera "Bras" lorsque vous sélectionnez comme le Gauche ou Droite et comme le correspondant GaucheSupérieurBras ou DroiteSupérieurBras , et elle sera "Jambe" lorsque vous sélectionnez comme le GauchePied ou DroitePied et comme le correspondant GaucheSupérieurJambe ou DroiteSupérieurJambe .Dans tous les autres cas, si vous ne spécifiez pas de poteau, la chaîne pourrait ne pas se plier comme vous le souhaitez.
Priority
Lorsque plusieurs contrôles sont actifs sur un personnage, l'ordre dans lequel ils sont résolus par le système sous-jacent affecte la pose finale générée.En changeant cette valeur, vous spécifiez l'ordre dans lequel les contrôles sont satisfaits.Les valeurs plus élevées ont une priorité plus élevée, et les contrôles de priorité supérieure sont résolus plus tard car leur résultat pourrait annuler le résultat précédent d'autres contrôles.Si vous avez plusieurs contrôles IK sur un personnage et que l'un est plus important que l'autre, spécifiez une priorité inférieure pour celui-ci.Par défaut, c'est 0, ce qui signifie que tous les contrôles ont la même priorité.
SmoothTime
Cette valeur spécifie le nombre moyen de secondes qu'il faut pour que le EndEffector atteigne le Target.Le comportement est celui d'un ressort critiquement amorti, où le taux de changement est proportionnel à la distance vers la cible et aucune oscillation n'est présente lors de l'approche de la cible.Les valeurs plus petites créent une convergence plus rapide, et les valeurs plus importantes créent une convergence plus lente.Une valeur de 0 désactive le lissage.La valeur par défaut est de 0,05 pour fournir un lissage très léger qui rend le mouvement réaliste.
Target
Le Target représente un point ( CFrame ) dans le monde que vous voulez que votre EndEffector atteigne.Le comportement exact de l'atteinte peut être défini via la propriété Type, et un supplément de Offset peut être appliqué dessus pour le modifier.Si vous définissez un Target qui sera déplacé par la physique ou par un script, à chaque cadre le IKControl essaiera de le satisfaire, mettant automatiquement à jour le point à atteindre.
En modifiant le Type, vous pouvez modifier le comportement du contrôle. Ce sont les options disponibles :
- Transformer : c'est une contrainte 6-DoF complète. Aligne le EndEffector``Datatype.CFrame sur celle du Target .
- Position : aligne la position EndEffector sur celle du Target.
- Rotation : aligne la rotation EndEffector à celle de la Target.
- LookAt : déplace et oriente toute la chaîne pour faire un axe (par défaut l'axe avant) sur le point EndEffector à une position dans le monde spécifiée par Target .
Weight
Vous pouvez contrôler à quel point un contrôle donné affecte la pose du personnage en utilisant cette propriété.Les valeurs devraient être dans la plage [0, 1].0 signifie aucun effet, et 1 signifie le plein effet du contrôle IK.Les valeurs en dehors de cette plage sont tronquées.Varier cette valeur de manière fluide vous permet de mélanger ou d'éliminer un contrôle spécifique pour éviter les mouvements brusques.C'est 1 par défaut.
Le poids détermine le facteur d'interpolation entre l'effecteur final et la cible IK.Définir le poids à 0 n'empêche pas le contrôle IK car d'autres facteurs, y compris le facteur de lissage SmoothTime et le poteau, peuvent encore changer la pose.Pour désactiver vraiment le contrôle IK, tournez la propriété Enabled à faux.