IKControl
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Le istanze IKControl generano pose di animazione procedurale utilizzando Kinematica Inversa (IK).Permettono di far rispondere ai personaggi in modo realistico al loro Ambiente.
Ad esempio, puoi fare in modo che un personaggio metta la mano su una maniglia di porta esattamente e il personaggio lo farà indipendentemente dalla sua posizione.I controlli IK forniscono il vantaggio di dover creare meno animazioni per il tuo gioco mentre dai alla tua esperienza una sensazione più realistica e levigata.
IKControls deve essere un figlio di un Humanoid o AnimationController con un Animator e avere tutte le loro proprietà richieste impostate correttamente, altrimenti non hanno alcun effetto.Le proprietà richieste sono Type , EndEffector , Target , ChainRoot .Non appena questi sono Impostare, il modulo IkControl modifica la posa del tuo personaggio come specificato.Il seguente esempio di codice mostra come configurare il tuo primo IKControl e iniziare a creare animazioni più realistiche per il tuo Gioco.
Puoi usare IKControls per creare un personaggio:
- Ruota la sua testa e il torso per guardare un punto di interesse nel Mondo.
- Modifica le posizioni dei suoi piedi per rispondere al terreno dinamico. Aggiusta le sue gambe e i piedi per posizionarli in modo appropriato sul terreno con rocce e pendenze.
- Tieni una pistola e posiziona le sue mani in modo appropriato sul grip senza dover creare animazioni per ogni pistola nel Gioco.
- Mira a un punto nel Mondo, in modo che la punta del punto della pistola si posizioni esattamente su ciò che vuoi sparare. Particolarmente utile nei tiratori in terza persona.
- Posiziona le sue mani sulla ruota di sterzo di un'auto e seguila quando si gira.
- Molto di più!
IKControl sovrascriverà l'animazione per tutte le parti tra il ChainRoot e il EndEffector .Puoi abilitarlo/disabilitarlo usando Enabled o cambiare quanto hanno un effetto sull'animazione sottostante usando il Weight.Fai attenzione: se non configuri correttamente il tuo IKControls, potresti generare pose cattive e irrealistiche!
Campioni di codice
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
Sommario
Proprietà
L'ultima parte in cui sei interessato a spostare il tuo personaggio.Ad esempio, il braccio superiore.Deve essere un antenato di EndEffector e essere un BasePart o un Bone nel tuo personaggio.
Attiva/disattiva il controllo. Vero per Offpredefinita.
La parte a cui sei interessato a spostarti per raggiungere il Target .Ad esempio, la mano del tuo personaggio.Deve essere un discendente di ChainRoot e essere un BasePart o un Bone nel tuo personaggio.
Un offset aggiuntivo applicato sopra il EndEffector nel suo spazio locale per cambiare dove si muove.
Un offset aggiuntivo applicato sopra il Target per cambiare dove si muove il EndEffector .
Un'istanza opzionale che determina in quale modo si piega la catena. Puoi usarla per specificare in quale modo si piega un gomito o un ginocchio.
Specifica l'ordine in cui i controlli vengono risolti. I valori più alti hanno una priorità maggiore.
Specifica il numero medio di secondi che ci vogliono perché il EndEffector raggiunga senza problemi il Target .
L'oggetto a cui il EndEffector raggiunge o punta.Può essere qualsiasi cosa abbia una posizione nel Mondo, come BasePart , Attachment , Bone , o Motor6D .
Specifica come il solvente soddisfi questo controllo.
Specifica il peso del bersaglio di controllo IK. Dovrebbe essere nella gamma [0, 1].
Metodi
Proprietà
ChainRoot
Specificando un ChainRoot e un EndEffector , istruisci il IKControl che è consentito spostare e ruotare tutte le parti tra le due per spostare il EndEffector al Target .Ad esempio, se specifici la mano sinistra come EndEffector e l'arto superiore sinistro come ChainRoot, il controllo muove 3 parti: la mano sinistra, l'arto inferiore sinistro e l'arto superiore sinistro.Evita di impostare ChainRoot come root effettivo del personaggio perché produce risultati irrealistici.
Enabled
Questa proprietà ti consente di Offe disattivare il controllo IK.È attivo per impostazione predefinita.Quando Enabled è falso, il controllo IK è disattivato e non viene risolto dal Risolutore fisico PGSdi base.
EndEffector
Il EndEffector descrive l'ultima parte della catena del tuo personaggio che vuoi influenzare.Ad esempio, potrebbe essere la mano quando vuoi muovere l'intero braccio per raggiungere un punto.Può essere un BasePart su un personaggio, che ha un Motor6D come suo figlio, un Motor6D direttamente, un Bone , o un Attachment .Il punto di rotazione del selezionato EndEffector si sposta al Target , quindi puoi usare Attachments per modificare quale punto di un BasePart dovrebbe raggiungere il Target .
EndEffectorOffset
L'offset dell'effetto finale è un ulteriore CFrame applicato sopra l'Target``Datatype.CFrame che produce l'CFrame finale utilizzato per posizionare il EndEffector .Per impostazione predefinita, è il CFrame di identità, quindi se non lo imposti, non ha alcun effetto e l'EndEffector utilizza direttamente il Target``Datatype.CFrame , che è specificato nello spazio locale del EndEffector .
In alternativa, puoi utilizzare gli allegati impostando un allegato come EndEffector , che lo sposta al Target invece delle parti a cui è allegato, ottenendo effettivamente lo stesso Risultato.
Puoi anche usare EndEffectorOffset per modificare quale asse del EndEffector deve puntare al Target quando si usa LookAt come Type .
Offset
L'offset è un ulteriore CFrame applicato sopra il Target``Datatype.CFrame che produce l'ultimo CFrame utilizzato per posizionare il EndEffector .È l'identità predefinita, quindi se non la imposti, non avrà alcun effetto e il EndEffector utilizzerà direttamente il Target``Datatype.CFrame .Puoi animarlo per creare animazioni procedurali come la digitazione su una tastiera.È utile quando i Target e EndEffector non sono allineati e devi correggerli con una rotazione o traduzione aggiuntiva.
Pole
Il Pole è un opzionale Instance che ti dà il controllo su come le parti intermedie nel tuo personaggio dovrebbero piegarsi.Può essere qualsiasi cosa abbia una posizione nel Mondo, come BasePart , Attachment , Bone , Motor6D .È per impostazione predefinita nil .Quando lo specifici, il solvente sottostante farà piegare le parti verso di esso.Quando è nil , il solvente cercherà di piegare i gomiti e le ginocchia in modo appropriato in base alla parte del personaggio.La parte sarà "Braccio" quando selezioni come EndEffector sia il LeftHand o RightHand e come ChainRoot il corrispondente LeftUpperArm o RightUpperArm, e sarà "Gamba" quando selezioni come EndEffector sia il LeftFoot o RightFoot e come ChainRoot il corrispondente LeftUpperLeg o RightUpperLeg.In tutti gli altri casi, se non specifici un polo, la catena potrebbe non piegarsi come previsto.
Priority
Quando più controlli sono attivi su un personaggio, l'ordine in cui vengono risolti dal sistema sottostante influisce sulla posa finale generata.Cambiando questo valore, specifici l'ordine in cui i controlli sono soddisfatti.I valori più alti hanno una priorità maggiore e i controlli di priorità più elevata vengono risolti più tardi perché il loro risultato potrebbe sostituire il risultato precedente di altri Controlli.Se hai più controlli IK su un personaggio e uno è più importante dell'altro, specifica una priorità più bassa per esso.È 0 per impostazione predefinita, cioè tutti i controlli hanno la stessa priorità.
SmoothTime
Questo valore specifica il numero medio di secondi che ci vogliono perché il EndEffector raggiunga il Target.Il comportamento è quello di una molla criticamente ammortizzata, in cui il tasso di cambiamento è proporzionale alla distanza dal bersaglio e non sono presenti oscillazioni quando si avvicina al bersaglio.I valori più piccoli creano una convergenza più rapida, e i valori più grandi creano una convergenza più lenta.Un valore di 0 disabilita lo smoothing.Il valore predefinito è 0.05 per fornire una lisciatura molto lieve che renda il movimento realistico.
Target
Il Target rappresenta un punto ( CFrame ) nel mondo che vuoi raggiungere con il tuo EndEffector .Il comportamento esatto di raggiungimento può essere impostato tramite la ProprietàType, e un ulteriore Offset può essere applicato sopra di essa per modificarlo.Se impostate un Target che verrà spostato sia dalla fisica che da uno script, ad ogni frame il IKControl cercherà di soddisfarlo, aggiornando automaticamente il punto da raggiungere.
Cambiando il Type, puoi cambiare il comportamento del controllo. Queste sono le opzioni disponibili:
- Transform: è una Vincolo6-DoF completa. Allinea il EndEffector``Datatype.CFrame a quello del Target .
- Posizione: allinea la posizione EndEffector alla posizione Target.
- Rotazione: allinea la rotazione EndEffector a quella del Target .
- LookAt: muove e orienta l'intera catena per fare un asse (per impostazione predefinita l'asse in avanti) sul punto EndEffector a una posizione nel mondo specificata da Target .
Weight
Puoi controllare quanto un dato controllo influisca sulla posa del personaggio usando questa Proprietà.I valori dovrebbero essere nella gamma [0, 1].0 vuol dire nessun effetto, e 1 vuol dire pieno effetto del controllo IK.I valori al di fuori di questo intervallo vengono troncati.Variare lisciamente questo valore ti consente di mescolare in o fuori un controllo specifico per evitare movimenti scossanti.È 1 per impostazione predefinita.
Il peso determina il fattore di interpolazione tra l'effetto finale e il bersaglio IK.Impostare il peso a 0 non disabilita il controllo IK perché altri fattori, tra cui il fattore di levigatura SmoothTime e Pole, possono ancora cambiare la posa.Per disabilitare veramente il controllo IK, imposta la proprietà Enabled a false.