IKControl

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

IKControl 實例使用逆向動力學(IK)生成程序動畫姿勢。它們可以讓你讓角色對環境有實際反應。

例如,你可以讓角色放置手在門把手上,並且角色會獨立於其位置進行。IK控件提供需要創建更少的動畫來為您的遊戲帶來更現實和精緻的感覺的優勢。

必須是 或 的子孫,並且設定了所有必要的屬性,否則沒有任何效果。必須的屬性是 Type , EndEffector , Target , ChainRoot .一旦設置好之後,IkControl會修改您指定的角色姿勢。下面的代碼示例展示了如何設置你的第一個 IKControl 並開始創建更真實的動畫為你的遊戲。

您可以使用 IKControls 來製作角色:

  • 旋轉頭部和軀幹以查看世界上的一個特定點。
  • 修改其腳位以回應動態地形。調整其腳和腿,將它們放置在岩石和坡度上的地形上。
  • 拿著槍並將手放置在握把上,不需要為遊戲中的每一枝槍創建動畫。
  • 瞄準世界上某個點,使槍的尖端準確地瞄準你想要射擊的東西。特別適用於第三人稱射手。
  • 將手放在汽車的方向盤上,當它旋轉時跟隨它。
  • 還有更多!

IKControl 將覆蓋 ChainRootEndEffector 之間所有零件的動畫。您可以使用 Enabled 啟用或禁用它,或使用 Weight 改變它對基礎動畫的影響程度。小心:如果你沒有正確設置你的 IKControls ,你可能會生成不好且不切實際的姿勢!

範例程式碼

This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.

IKControl setup

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

概要

屬性

屬性

ChainRoot

平行讀取

指定 ChainRootEndEffector ,您會指示 IKControl 允許在兩者之間移動和旋轉所有零件來移動 EndEffectorTarget 。例如,如果您指定左手為 EndEffector 和左上臂為 ChainRoot,控制將移動 3 部分:左手、左下臂和左上臂。避免將 ChainRoot 設為角色的實際根,因為這會產生不切實際的結果。

Enabled

平行讀取

此屬性可讓您切換 IK 控制開啟和關閉。預設為啟用。當 Enabled 為假時,IK控制關閉且不會被底層解決器解決。

EndEffector

平行讀取

The EndEffector 描述您想影響的角色鏈中最後一部分。例如,當您想將整個手臂移動到達一個點時,可能是手。它可以是在角色上的 BasePart ,有 Motor6D 作為其子, Motor6D 直接, BoneAttachment 。選擇的 EndEffector 移動到 Target ,因此您可以使用 Attachments 來修改哪個點的 BasePart 應該到達 Target

EndEffectorOffset

平行讀取

結束效果器偏移是額外的 CFrame 在上面應用的 Target CFrame 產生最終 CFrame 用於放置 EndEffector 的 。預設情況下,它是身份 CFrame,因此如果你未設置它,它沒有效果,而 EndEffector 使用的是 Target 的直接使用,這在 CFrame 的本地空間中指定,這是在 EndEffector 中指定的。

或者,您可以使用附件,通過設置附件為 EndEffector 將其移動到 Target 而不是附帶的零件,有效獲得相同的結果。

您也可以使用 EndEffectorOffset 來修改哪個軸的 EndEffector 應指向 Target 時使用 LookAt 作為 Type

Offset

平行讀取

抵消是額外的 CFrame 在上面應用的 Target CFrame 產生最終 CFrame 用於放置 EndEffector 的 。它是默认身份,因此如果您未設置它,它就沒有效果,而 EndEffector 將直接使用 Target CFrame 。您可以將其動畫以創建程序動畫,例如在鍵盤上輸入文字。當 TargetEndEffector 不對齊且需要用額外的旋轉或翻譯來修正時,這很有用。

平行讀取

Pole 是可選的 Instance ,可以讓你控制你角色中的中間部件應該彎折的方式。它可以是任何在世界上有位置的東西,例如 BasePart , Attachment , Bone , Motor6D .默认值為 nil 。當您指定時,底層解決器會使零件向它彎折。當它是 nil 時,解決器會嘗試根據角色的肢體來適當彎曲肘和膝。當您選擇為 選擇 左手 或 右手 和 左上臂 或 右上臂 時,它將成為"手臂",當您選擇為 選擇 左腳 或 右腳 和 左上臂 或 右上臂 時,它將成為"腿"。在所有其他情況下,如果你沒有指定柱,繩索可能不會像你所期望的那樣彎折。

Priority

平行讀取

當多個控制在角色上啟用時,基礎系統解決它們的順序會影響最終生成的姿勢。通過變更此值,您指定控制滿足的訂單。高值具有更高的優先級,高優先級的控件稍後解決,因為它們的結果可能會覆蓋其他控件的前一個結果。如果你有多個 IK 控件在一個角色上,其中一個比另一個更重要,則指定更低的優先級。預設為 0,意味著所有控件的優先級都一樣。

SmoothTime

平行讀取

此值指定 EndEffector 到達 Target 所需的平均秒數。行為是一個嚴重阻尼的彈簧,其變化率與目標距離成正比,且在接近目標時沒有振動。較小的值創建更快的融合,較大的值創建更慢的融合。0 的值停用平滑。預設值為 0.05,提供非常輕微的平滑,使運動感覺真實。

Target

平行讀取

Target 代表世界上你希望你的 CFrame 達到的一個點 (EndEffector)。到達的準確行為可以通過 Type 屬性設置,額外的 Offset 可以應用在其上方以修改它。如果你設置了一個 Target ,將由物理或腳指令碼移動,在每個框架中,IKControl 將嘗試滿足它,自動更新到達的點。

平行讀取

通過變更 Type , 您可以改變控件的行為。這些是可用選項:

  • 轉換:這是一個完整的 6 軸限制式。將 EndEffector CFrame 對準 Target
  • 位置:將 EndEffector 位置調整到 Target 位置。
  • 旋轉:將 EndEffector 旋轉調整為 Target 的旋轉。
  • LookAt:移動並導向整個疊加以使軸(默認為前軸)在 點上的世界指定位置上。

Weight

平行讀取

您可以使用此屬性來控制給定控件對角色姿勢的影響程度。值應在 [0、1] 範圍內。0 表示沒有效果,1 表示 IK 控制的完整效果。超出此範圍的值會被切割。平滑地變化此值可讓您融入或退出特定控件,以避免碰撞運動。預設為 1。

重量決定了端效應器與 IK 目標之間的插值因子。將重量設為 0 不會停用 IK 控制,因為其他因素,包括平滑時間因子和桿子,仍然可以改變姿勢。要真正禁用 IK 控制,將 Enabled 屬性設為 false。

方法

GetChainCount


返回

GetChainLength


返回

GetNodeLocalCFrame

參數

index: number
預設值:""

返回

GetNodeWorldCFrame

參數

index: number
預設值:""

返回

GetRawFinalTarget


返回

GetSmoothedFinalTarget


返回

活動