Cinemática inversa (IK) é uma técnica comum na animação de computador para fazer com eficiência os personagens se moverem e interagirem realisticamente com seu ambiente.O processo de criação de um movimento realista para um personagem frequentemente requer muitas iterações e pequenos ajustes de várias articulações.Com IK, você pode posar e animar múltiplas partes de personagens posando ou ajustando um único Objeto.
Essa técnica de animação pode fornecer soluções para os seguintes exemplos:
IKControl
Você pode usar um IKControl para adicionar IK de forma procedural ao seu personagem fora do Editor de Animação.O Studio permite que você aplique IK de forma programática a todos os personagens, como R15, Rthro e personagens importados personalizados, para criar movimentos e interações realistas em sua experiência.
Ao adicionar um IKControl, configure as propriedades necessárias corretamente para evitar resultados de animação inesperados e não naturais.Como em toda animações, teste seus controles IK para garantir que você alcance o comportamento desejado.
Propriedades necessárias
Ao adicionar um IKControl a Humanoid ou AnimationController do seu personagem, você deve definir as seguintes propriedades necessárias para habilitar o IK:
Propriedade | Descrição |
---|---|
Type | Especifica o tipo de comportamento do controle IK. Veja Enum.IKControlType para a lista de opções de comportamento. Os tipos de comportamento comuns são Position ou Transform. |
EndEffector | Um BasePart ou Bone em seu modelo de personagem que segue para o Target .Por exemplo, você pode definir um osso Esquerda como um EndEffector para alcançar um conjunto de objetos de maçaneta definido como o Target. |
Target | O objeto que o EndEffector alcança ou aponta. Um Target pode ser qualquer objeto com uma posição mundial. |
ChainRoot | Define a cadeia de BaseParts ou Bones que o IKControl afeta.Todas as peças conectadas entre o e o são afetadas pelo tipo de comportamento definido. Por exemplo, se o braço esquerdo do seu personagem for definido como Esquerda , você pode aplicar IK a todo o braço esquerdo definindo Esquerda para o Braço Superior Esquerdo .Para aplicar IK apenas às partes abaixo do cotovelo, defina ChainRoot para o Braço Inferior Esquerdo . |
Testar Controles IK
Você pode adicionar e editar IKControl programaticamente ou diretamente através do Explorador.Você pode até adicionar e fazer alterações em IKControl durante um teste de Jogo para verificar rapidamente como várias propriedades afetam os movimentos de um personagem.
Para testar rapidamente seu IKControl usando um Attachment como alvo:
Na aba Teste da barra de ferramentas, selecione Jogar para iniciar o teste de jogo.
Clique no ícone ⊕ ao lado do modelo de personagem HumanoidRootPart e adicione um Anexo .
Selecione o Anexo e use a ferramenta Mover para posicionar o objeto na frente do seu personagem na janela de visualização.
Na janela Explorer , selecione o ícone ⊕ ao lado do Humanoid e adicione um IKControl .
Selecione o IKControl e defina os seguintes valores de propriedade na janela Propriedades :
- Tipo : Selecione Transform do menu suspenso.
- Alvo : Selecione o objeto Anexo recém-criado no Explorador.
Propriedades do IKControl >Painel do Explorador - Modelo de Personagem >O braço esquerdo do seu personagem agora deve alcançar o alvo Attachment .Você pode experimentar mover o Attachment ou editar as propriedades IKControl para obter diferentes resultados.
Adicionar restrições
Você pode usar Constraints para restringir como as articulações podem se mover ao alcançar seu alvo.As restrições podem garantir que as articulações, como os cotovelos e joelhos, sejam dobradas naturalmente ou para fazer as articulações mecânicas girarem em uma orientação específica.


Para adicionar restrições ao seu personagem usando IKControl , sua IKControl e restrição deve atender às seguintes condições:
- Os anexos referenciados nas propriedades da restrição Attachment0 / Attachment1 se anexam às mesmas peças que o Motor6D / Part0 / Part1.
- As posições relativas de Attachment0 / Attachment1 devem ser iguais às posições correspondentes dos Class.Motor6D``Class.Motor6D.C0|C0 / C1 CFrames.
- A restrição e o IKControl compartilham o mesmo pai Model.
As instruções a seguir descrevem o processo de adicionar um HingeConstraint para restringir a rotação do cotovelo de um personagem e adicionar um BallSocketConstraint ao pulso para limitar o ângulo de rotação.
Cotovelo
Os personagens R15 do Roblox já incluem anexos em suas articulações que você pode usar para aplicar a restrição de punho.Para o cotovelo, tanto o LeftUpperArm quanto o LeftLowerArm incluem um LeftElbowRigAttachment.Além de adicionar uma restrição, você também precisa adicionar anexos adicionais para cada parte de LeftElbowRigAttachment para especificar em qual eixo o cotovelo pode girar.
Para adicionar os HingeConstraint e anexos filhos:
No Explorador, localize o Braço Inferior Esquerdo do seu modelo e clique no botão ⊕ .
Adicione uma restrição de dobradiça com o nome LeftElbowConstraint.
No Explorador, navegue até o LeftUpperArm.LeftElbowRigAttachment e adicione um anexo:
Clique no botão ⊕ para adicionar um anexo com o nome LeftElbowConstraintAttachment0.
Na janela de visualização, selecione o anexo e use a ferramenta Girar para girar o anexo para que o amarelo Eixo primário seja o eixo da rotação esperada do seu cotovelo.
Defina a propriedade LeftElbowConstraint.Attachment0 para este novo anexo.
No Explorador, navegue até o Braço Inferior Esquerdo do modelo.ElbowRigAttachment para adicionar um anexo:
- Clique no botão ⊕ e adicione um anexo com o nome LeftElbowConstraintAttachment1.
- Defina a propriedade LeftUpperArm.LeftElbowConstraint.Attachment1 para este novo anexo.
- Copie a propriedade LeftElbowConstraintAttachment0.CFrameOrientation e cole-a como o valor LeftElbowConstraint.Attachment1.CFrameOrientation .
Teste seu IKControl para verificar se o cotovelo gira apenas em torno de seu eixo de dobradiça:
Tornozelo
Mesmo com a restrição de punho, o IKControl ainda pode produzir poses irrealistas com os pulsos.

Você pode melhorar isso adicionando um BallSocketConstraint para limitar a rotação do pulso.Embora isso seja semelhante ao processo de adição de um HingeConstraint a ombro, você pode usar a propriedade LimitsEnabled na restrição para controlar ainda mais o alcance de movimento do punho.
Para adicionar um BallSocketConstraint para o pulso:
- No Explorador, localize o Esquerda do modelo do seu modelo e clique no botão ⊕ .
- Adicione um Conjunto de restrições de bola com o nome LeftWristConstraint.
- Localize o LeftLowerArm.LeftWristRigAttachment do seu modelo e adicione um anexo:
- Clique no botão ⊕ e adicione um anexo com o nome LeftWristConstraintAttachment0.
- Na janela de visualização, selecione o anexo e use a ferramenta Girar para girar o anexo para que os pontos principais amarelos da Axis primária apontem para os dedos do modelo.
- Defina a propriedade LeftWristConstraint.Attachment0 para o novo LeftWristConstraintAttachment0.
- Localize o LeftHand.LeftWristRigAttachment do seu modelo e adicione um anexo:
- Clique no botão ⊕ e adicione um anexo com o nome LeftWristConstraintAttachment1.
- Copie a propriedade LeftWristConstraintAttachment0.CFrameOrientation e cole-a como a propriedade LeftWristConstraintAttachment1.CFrameOrientation .
- Defina a propriedade LeftWristConstraint.Attachment1 para este novo LeftWristConstraintAttachment1 .
- No Explorador, selecione a Restrição de Pulso Esquerdo .
- No Editor de Propriedades, defina o seguindo:
- Habilite LimitesAtivados .
- Defina UpperAngle para 80.Isso controla quanto o eixo da restrição pode girar e 80 graus é aproximadamente quanto o pulso deve ser capaz de dobrar.
- Dependendo do seu personagem, você pode querer ajustar a direção para a qual o cone está apontando.Você pode fazer isso usando a ferramenta Girar para girar o Anexo0 da restrição.
Ao selecionar a Restrição de Punho Esquerdo , um cone verde aparece visualizando o alcance de movimento do punho.

Com a restrição configurada, teste o IKControl com a mão apontando para baixo na frente do personagem e o punço deve girar e dobrar-se mais realisticamente.