La Cinematica Inversa (IK) è una tecnica comune nell'animazione computerizzata per far muovere i personaggi in modo efficiente e interagire realisticamente con il loro ambiente. Il processo di creazione di un movimento realistico per un personaggio richiede spesso molte iterazioni e piccoli aggiustamenti delle varie articolazioni. Con l'IK, puoi posare e animare più parti del personaggio posizionando o regolando un singolo oggetto.
Questa tecnica di animazione può fornire soluzioni ai seguenti esempi:
IKControl
Puoi utilizzare un IKControl per aggiungere proceduralmente IK ai tuoi modelli di personaggi al di fuori dell'Animation Editor. Studio ti consente di applicare programmaticamente l'IK a tutti i personaggi per creare movimenti e interazioni realistiche nel tuo gioco.
Quando aggiungi un IKControl, imposta correttamente le proprietà richieste per evitare risultati di animazione inaspettati e innaturali. Come per tutte le animazioni, testa i tuoi IKControls per assicurarti di ottenere il comportamento desiderato.
Proprietà richieste
Quando aggiungi un IKControl al Humanoid o al AnimationController del tuo personaggio, devi impostare le seguenti proprietà richieste per abilitare l'IK:
| Proprietà | Descrizione |
|---|---|
| Type | Specifica il tipo di comportamento del controllo IK. Vedi Enum.IKControlType per l'elenco delle opzioni di comportamento. I tipi di comportamento comuni sono Position o Transform. |
| EndEffector | Un BasePart o Bone nel tuo modello di personaggio che punta verso il Target. Ad esempio, puoi impostare un osso LeftHand come EndEffector per raggiungere un oggetto maniglia della porta impostato come Target. |
| Target | L'oggetto che il EndEffector raggiunge o punta. Un Target può essere qualsiasi oggetto con una posizione nel mondo. |
| ChainRoot | Definisce la catena di BaseParts o Bones che il IKControl influenza. Tutte le parti collegate tra il ChainRoot e il EndEffector sono influenzate dal IKControl utilizzando il tipo di comportamento definito. Ad esempio, se la LeftHand del tuo personaggio è impostata come Target, puoi applicare l'IK all'intero braccio sinistro impostando ChainRoot su LeftUpperArm. Per applicare l'IK solo alle parti sotto il gomito, imposta ChainRoot su LeftLowerArm. |
Testa IKControls
Puoi aggiungere e modificare IKControl programmaticamente o direttamente tramite l'Explorer. Puoi anche aggiungere e apportare modifiche a IKControl durante un test di gioco per controllare rapidamente come varie proprietà influenzano i movimenti di un personaggio.
Per testare rapidamente il tuo IKControl utilizzando un Attachment come target:
Dalla mezzanina di Studio, inizia un playtest.
Fai clic sull'icona ⊕ accanto al HumanoidRootPart del modello del tuo personaggio e aggiungi un Attachment.

Seleziona l'Attachment e utilizza lo strumento Move per posizionare l'oggetto di fronte al tuo personaggio nella vista.

Nella finestra Explorer, seleziona l'icona ⊕ accanto al Humanoid del tuo personaggio e aggiungi un IKControl.

Seleziona il IKControl e imposta i seguenti valori delle proprietà nella finestra Properties:
- Type: Seleziona Transform dal menu a discesa.
- Target: Seleziona il nuovo oggetto Attachment creato nell'Explorer.

Proprietà IKControl 
Explorer - Modello del Personaggio Il braccio sinistro del tuo personaggio dovrebbe ora raggiungere il target Attachment. Puoi sperimentare spostando il Attachment o modificando le proprietà del IKControl per ottenere risultati diversi.
Aggiungi vincoli
Puoi utilizzare Constraints per limitare come le articolazioni possono muoversi quando raggiungono il loro target. I vincoli possono garantire che articolazioni come i gomiti e le ginocchia si pieghino in modo naturale, o per far ruotare le articolazioni meccaniche in un'orientazione specifica.


Per aggiungere vincoli al tuo personaggio utilizzando IKControl, il tuo IKControl e il vincolo devono soddisfare le seguenti condizioni:
- Gli attacchi referenziati nelle proprietà Attachment0/Attachment1 del vincolo devono attaccarsi alle stesse parti del Motor6D Part0/Part1.
- Le posizioni relative di Attachment0/Attachment1 devono corrispondere alle posizioni corrispondenti dei Motor6D C0/C1 CFrames.
- Il vincolo e l'IKControl condividono lo stesso genitore Model.
Le seguenti istruzioni descrivono il processo di aggiunta di un HingeConstraint per limitare la rotazione del gomito di un personaggio e l'aggiunta di un BallSocketConstraint al polso per limitare l'angolo di rotazione.
Gomito
I personaggi con modelli R15 includono già attacchi nelle loro articolazioni che puoi utilizzare per applicare il vincolo del gomito. Per il gomito, sia il LeftUpperArm che il LeftLowerArm includono un LeftElbowRigAttachment. Oltre ad aggiungere un vincolo, devi anche aggiungere attacchi secondari a ciascun LeftElbowRigAttachment di ogni parte per specificare quale asse il gomito può ruotare.
Per aggiungere il HingeConstraint e gli attacchi secondari:
Nella finestra Explorer, trova il LeftLowerArm del tuo modello e fai clic sul ⊕ button.
Aggiungi un HingeConstraint con il nome LeftElbowConstraint.
Nella finestra Explorer, naviga a LeftUpperArm.LeftElbowRigAttachment e aggiungi un attacco:
Fai clic sul ⊕ button per aggiungere un Attachment con il nome LeftElbowConstraintAttachment0.
Nella vista, seleziona l'attacco e utilizza lo strumento Rotate per ruotare l'attacco in modo che il giallo PrimaryAxis sia l'asse di rotazione previsto del gomito.

Imposta la proprietà LeftElbowConstraint.Attachment0 su questo nuovo attacco.
Nella finestra Explorer, naviga all'LeftLowerArm.LeftElbowRigAttachment del tuo modello e aggiungi un attacco:
- Fai clic sul ⊕ button e aggiungi un Attachment con il nome LeftElbowConstraintAttachment1.
- Imposta la proprietà LeftUpperArm.LeftElbowConstraint.Attachment1 su questo nuovo attacco.
- Copia la proprietà LeftElbowConstraintAttachment0.CFrameOrientation e incollala come valore LeftElbowConstraint.Attachment1.CFrameOrientation.

Testa il tuo IKControl per verificare che il gomito ruoti solo attorno al suo asse a cerniera:
Polsi
Anche con il vincolo del gomito, l'IKControl può ancora produrre pose irrealistiche con i polsi.

Puoi migliorare questo aggiungendo un BallSocketConstraint per limitare la rotazione del polso. Anche se questo è simile al processo per aggiungere un HingeConstraint al gomito, puoi utilizzare la proprietà LimitsEnabled su questo vincolo per controllare ulteriormente l'ampiezza di movimento del polso.
Per aggiungere un BallSocketConstraint per il polso:
- Nella finestra Explorer, trova il LeftHand del tuo modello e fai clic sul ⊕ button.
- Aggiungi un BallSocketConstraint con il nome LeftWristConstraint.
- Trova il LeftLowerArm.LeftWristRigAttachment del tuo modello e aggiungi un attacco:
- Fai clic sul ⊕ button e aggiungi un Attachment con il nome LeftWristConstraintAttachment0.
- Nella vista, seleziona l'attacco e utilizza lo strumento Rotate per ruotare l'attacco in modo che il giallo PrimaryAxis punti verso le punte delle dita del modello.

- Imposta la proprietà LeftWristConstraint.Attachment0 sul nuovo LeftWristConstraintAttachment0.
- Trova il LeftHand.LeftWristRigAttachment del tuo modello e aggiungi un attacco:
- Fai clic sul ⊕ button e aggiungi un Attachment con il nome LeftWristConstraintAttachment1.
- Copia la proprietà LeftWristConstraintAttachment0.CFrameOrientation e incollala come proprietà LeftWristConstraintAttachment1.CFrameOrientation.
- Imposta la proprietà LeftWristConstraint.Attachment1 su questo nuovo LeftWristConstraintAttachment1.
- Nella finestra Explorer, seleziona il LeftWristConstraint.
- Nella finestra Properties, imposta quanto segue:
- Abilita LimitsEnabled.
- Imposta UpperAngle su 80. Questo controlla quanto può ruotare l'asse del vincolo, e 80 gradi è approssimativamente quanto il polso dovrebbe essere in grado di piegarsi.
- A seconda del tuo personaggio, potresti voler regolare la direzione in cui punta il cono. Puoi farlo utilizzando lo strumento Rotate per ruotare l'Attachment0 del vincolo.
Quando selezioni il LeftWristConstraint, appare un cono verde che visualizza l'ampiezza di movimento del polso.

Con il vincolo impostato, testa l'IKControl con la mano che punta verso il basso di fronte al personaggio e il polso dovrebbe ruotare e piegarsi in modo più realistico.