IKControl
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
IKControl インスタンスは、逆キネマティクス (IK) を使用して手続きアニメーションポーズを生成します。キャラクターが環境にリアルに反応するようにすることができます。
たとえば、キャラクターがドアのハンドルに手を置くように指示することができ、キャラクターはその位置に関係なく独立してそうすることができます。IKControls は、ゲームのためにより少ないアニメーションを作成する必要があり、エクスペリエンスにより現実的で洗練された感触を与えるという利点を提供します。
IKControls は、Humanoid または AnimationController の子であり、Animator とすべての必要なプロパティが適切に設定されていなければ、効果はありません。必須のプロパティは Type , EndEffector , Target , ChainRoot です。それらが設定されると、IkControl は指定した通りにキャラクターのポーズを変更します。次のコードサンプルでは、最初の IKControl を設定し、ゲームのより現実的なアニメーションを作成する方法を示しています。
IKControls を使用してキャラクターを作成できます:
- 頭と胴体を回転させて、世界の特定の場所を見る
- その足の位置を変更して、動的な地形に対応します。その足と脚を調整して、岩や坂のある地形にそれらを配置します。
- 銃を持って、ゲーム内の各銃のためにアニメーションを作成する必要なく、グリップに手を適切に配置します。
- 世界のあるポイントを狙い、銃のチップが正確に狙いたいものに向かうようにします。特に、3人称シューターで役立ちます。
- 車のステアリングホイールに手を置き、回転するときにそれに従います。
- はるかに多く!
IKControl は、ChainRoot と EndEffector の間のすべてのパーツのアニメーションをオーバーライドします。 または を使用して有効化/無効化できます。または、 を使用して、基本のアニメーションに対する効果量を変更できます。注意してください:如果你未正確に設定 your IKControls 、あなたは悪い非現実的なポーズを生成する可能性があります!
コードサンプル
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
概要
プロパティ
キャラクターを移動する最後の部分。たとえば、上腕。祖先が EndEffector であり、キャラクターで BasePart または Bone である必要があります。
コントロールのオンとオフを切り替えます。デフォルトでは、真です。
移動して Target に到達するのに興味があるパーツ。たとえば、キャラクターの手。必須の子孫は ChainRoot であり、キャラクターで BasePart または Bone である必要があります。
ローカルスペースの EndEffector 上に追加のオフセットを適用して、移動先を変更する
Target の上に追加のオフセットを適用して、移動する EndEffector の場所を変更する。
チェーンが曲がる方向を決定するオプションのインスタンス。これを使用して、エルボーまたは膝がどの方向に曲がるかを指定できます。
コントロールの解決順序を指定します。高い値は優先度が高いです。
EndEffector がスムーズに Target に到達するのに必要な平均秒数を指定します。
EndEffector が到達したり、指したりするオブジェクト。それは、BasePart、Attachment、Bone、またはMotor6Dのように、世界に位置があるものでもあります。
ソルバーがこの制御を満たす方法を指定します。
IK コントロールターゲットの重量を指定します。[0, 1] 範囲である必要があります。
方法
プロパティ
ChainRoot
と を指定することで、2つの間のすべてのパーツを移動して回転することを許可する を指示し、 を に移動するように指示します。たとえば、LeftHand を EndEffector 、LeftUpperArm を ChainRoot として指定すると、コントロールが 3 部分を移動します:LeftHand、LeftLowerArm、LeftUpperArm。文字の実際のルートとして ChainRoot を設定しないでください、それは現実的でない結果を生成します。
Enabled
このプロパティでは、IK コントロールをオンとオフに切り替えることができます。デフォルトでオンです。Enabled が false になると、IK コントロールはオフになり、基本ソルバーによって解決されません。
EndEffector
The EndEffector は、影響を与えたいキャラクターのチェーンの最後の部分を説明します。たとえば、手が全体の腕を動かしてポイントに到達したいときなどです。キャラクター上の BasePart 、子供に Motor6D 、直接 Motor6D 、または Bone がある、または Attachment であることができます。選択された EndEffector のピボットは Target に移動し、どの Attachments ポイントが BasePart に到達するかを変更するために Target を使用できます。
EndEffectorOffset
最終効果オフセットは、最後に使用される CFrame を配置するために使用される Target の上に追加の CFrame が適用されます。これは、CFrame を配置するために使用される最終の EndEffector を生成します。デフォルトでは、ID CFrame であるため、設定しないと効果がありません、そして EndEffector は Target CFrame 直接使用し、これは EndEffector のローカルスペースに指定されています。
代わりに、添付ファイルを使用して、添付ファイルを EndEffector と設定して、パーツに付属している代わりに Target に移動し、効果的に同じ結果を得ることができます。
また、EndEffectorOffset を使用して、EndEffector がどの軸を指しているかを変更することもできます Target を使用するときに、LookAt を Type として。
Offset
オフセットは、最後に配置する を置くために使用される の上に追加の を適用します。デフォルトでは、その身分ですので、設定しないと、効果はありません、そして EndEffector は、Target CFrame 直接使用します。それをアニメートして、キーボードにタイプするような手続きアニメーションを作成できます。Target と EndEffector が一致していないとき、追加の回転または翻訳で修正する必要があります。
Pole
The Pole は、キャラクターの中の中間パーツの屈曲方法を制御するオプションの Instance です。それは、BasePart、Attachment、Bone、Motor6D など、世界に位置があるものでもあります。デフォルトでは nil です。それを指定すると、基本ソリューションはパーツをそれに向かって曲げます。When it is nil , the solver will try to make elbows and knees bend appropriately based on the limb of the character.肢は、 「左腕」または 右腕」と選択し、そして、 左上腕 または 右上腕 として、 左上腕 または 右上腕 を選択し、そして、 左上腕 または 右上腕 として、 左上腕 または 右上腕 を選択します。その他のすべての場合、ポールを指定しないと、チェーンは期待通りに曲がらない可能性があります。
Priority
キャラクターに複数のコントロールがアクティブであるとき、基本システムによって解決される順序は、最終生成されたポーズに影響します。この値を変更すると、コントロールが満足する順序を指定できます。より高い値はより高い優先度を持ち、優先度の高いコントロールは後で解決されることがあります。その結果は、他の操作ントロールの前の結果を上書きする可能性があるためです。キャラクターに複数の IK コントロールがあり、1つがもう一つより重要である場合は、低い優先度を指定します。デフォルトでは 0、すべてのコントロールが同じ優先度を持つことを意味します。
SmoothTime
この値は、EndEffector が Target に到達するのに平均的にかかる秒数を指定します。動作は、変更率がターゲットへの距離に比例するクリティカルダンピングのスプリングで、ターゲットに近づくと振動は存在しません。小さい値はより速い収束を生み出し、大きな値はより遅い収束を生み出します。値 0 はスムージングを無効にします。デフォルト値は 0.05 で、動作をリアルに感じさせる非常に軽いスムージングを提供します。
Target
The Target は、CFrame が到達する必要がある世界のポイントを表します(EndEffector)。到達の正確な動作は、Type プロパティを介して設定でき、その上に追加の Offset を適用して変更することができます。物理またはスクリプトによって移動される Target を設定すると、各フレームで IKControl がそれを満たそうとし、到達するポイントを自動的に更新します。
Type を変更することで、コントロールの動作を変更できます。利用可能なオプションは次のとおりです:
- 変換: 完全な 6-DoF 制約です。EndEffector``Datatype.CFrame を Target と一致させます。
- 位置: 位置 EndEffector を Target に調整します。
- 回転: EndEffector 回転を Target に合わせます。
- LookAt: は、全体のチェーンを動かし、または方向を設定して、 ポイントに世界が指定した位置に軸 (デフォルトでは前方軸) を配置します。
Weight
このプロパティを使用して、特定のコントロールがキャラクターのポーズにどれほど影響するかを制御できます。値は [0, 1] の範囲にあるべきです。0は効果がないことを意味し、1は IK コントロールの完全な効果を意味します。この範囲外の値はトリミングされます。この値を滑らかに変更すると、不快な動作を避けるために特定のコントロールをブレンドしたり外したりできます。デフォルトでは 1 です。
重量は、エンドエフェクタとIKターゲットの間のインターポレーション係数を決定します。重量を 0 に設定すると、IK コントロールが無効になることはありません。スムーズタイムスムージングファクターとポールを含む他の要因でも、ポーズを変更できます。IK コントロールを完全に無効にするには、Enabled プロパティを偽に設定します。