リギングワークフロー
このドキュメントでは、カスタムのアニメーションリグを作成するために必要なすべての手順とコンポーネントを説明します。このプロセスは、こちらの 動画 でも説明しています。
主なコンポーネント
Unity のアニメーションリグで使用する主なコンポーネントは以下の 4 つです。
- Animator: このビルトインコンポーネントをルートゲームオブジェクトに追加することで、階層がアニメーション化可能であると指定します。Animation Rigging は Unity のアニメーションシステムを基盤としているため、Animator は必須です。
- Rig Builder: このコンポーネントをルートゲームオブジェクトに追加すると、このコンポーネントでレイヤーにまとめた 1 つ以上のリグにより、アニメーション化された階層に変更を加えることができるようになります。
- Rig: リグをアニメーション化可能な階層のゲームオブジェクトに追加すると、リグはソースオブジェクト、およびアニメーション化された階層のポーズを変更するコンストレイントのコンテナになります。リグのウェイトを調整することで、最終ポーズに対する影響を制御できます。
- Constraint: このコンポーネントを Rig ゲームオブジェクトやその子ゲームオブジェクトに加えることで、リグにより実行される操作を指定できます。
以下の画像は、必要なコンポーネント全種類の間の相互依存関係の概要を図に示しています。
アニメーション化可能な階層のルートゲームオブジェクトに Rig Builder コンポーネントを追加すると、そのルートの子として Rig ゲームオブジェクトを作成できます (例えば Rig Setup)。アニメーションのリギングを可能にするには、Rig ゲームオブジェクトに Rig コンポーネントをアタッチする必要があります。Rig を Animator に接続するには、この Rig コンポーネントを Rig Builder コンポーネントの Rig Layer に割り当てる必要があります。
Rig ゲームオブジェクトを Rig Builder コンポーネントに接続した後で、Rig ゲームオブジェクトの階層の下にリグ要素 (コンストレイントコンポーネントを含んでいるゲームオブジェクト) を追加できます。さまざまなリグ要素を整理して階層構造にすることで、どのようなリグ設定の要件にも対応できます。
コンストレイントのソースオブジェクト (Target エフェクター、Hint エフェクターなど) は、関連付けられている Rig ゲームオブジェクトの下に置かれます。以下の画像の場合、Left Leg IK には Two Bone IK Constraint コンポーネントが設定されており、リグ要素として機能します。この IK は、LeftFootEffector ソースオブジェクトと LeftLegHint ソースオブジェクト両方の親です。
Rig Builder コンポーネント
Rig Builder コンポーネントは Animator コンポーネントと共存し、既存の Animator ステートマシンに追加される Playable Graph を作成します。Rig Builder コンポーネントは、Animator コンポーネントをもつゲームオブジェクトに追加する必要があります。Rig Builder の影響範囲は、Animator と同じ階層にする必要があります。
Rig Builder コンポーネントでは、Rig Layers (リグレイヤー) を使用して複数のリグを重ねたレイヤーを作り、各リグを任意のタイミングで有効/無効にできます。
Rig コンポーネント
Rig コンポーネントは、任意のコントロールリグにコンストレイントを追加する際の主なエントリーポイントです。Rig コンポーネントの数はコントロールリグ階層 1 つにつき 1 つだけにする必要があり、このリグを Rig Builder コンポーネントでリグレイヤーに割り当てる必要があります。1 つの階層で複数のコントロールリグを使用するには、各リグを異なるリグレイヤーに割り当て、別々に有効/無効にする必要があります。
Rig コンポーネントの主な目的は、技術的な観点から言うと、ローカルの階層にすべての Constraint コンポーネントを集めることです。このコンポーネントは、IAnimationJobs の番号付きリストを生成します。このジョブは、通常どおりに評価された後、Animator のポーズに適用されます。Rig コンポーネントは、GetComponentsInChildren を使用してコンストレイントを収集します。リグの階層に含まれるコンポーネントの順番によって、ジョブの評価順序が決まります。この方法は、以下に示す深さ優先探索に従っています。
つまり、1 つのゲームオブジェクトの下にコンストレイントをまとめることで、階層の変更を通じてそれらのコンストレイントの評価順序を操作することを可能にします。
コントロールリグの階層には、エフェクター、コンストレイント、コンストレイントの定義に必要なその他のオブジェクト/要素など、必要なリグ要素すべてが含まれている必要があります。コントロールリグ階層のルートは、スケルトンのルートと同じレベル (いずれも、Animator が含まれているゲームオブジェクトの下) である必要があります。言い換えると、リグ階層はスケルトン階層内ではなく、スケルトン階層の横に作成する必要があります。
Rig コンポーネントには、すべてのコンストレイントコンポーネントと同様に、Weight (ウェイト) プロパティがあります。このプロパティを直接、またはアニメーションやスクリプトで使用することで、コントロールリグ階層全体の有効化/無効化やイーズイン/イーズアウトを行えます。
その他のユーティリティ
Bone Renderer コンポーネント
Bone Renderer コンポーネントを使用すると、ボーンとして描画するトランスフォーム階層を定義して、リグ作成プロセス中に可視化および選択できるようになります。このボーンはゲームビューには表示されません。そのため、リグ作成目的でキャラクターの変形スケルトンを定義できます。
Bone Size、Shape、Color を変更することで、ボーンの見た目をカスタマイズできます。パッケージにはデフォルトの形状として、Line、Pyramid、Box が用意されています。ローカル軸の三脚を表示して、そのサイズを好みに合うように調整することもできます。
リグのエフェクター
リグのエフェクターを使用すると、トランスフォームにギズモを追加し、ボーンと同じように可視化、選択できるようになります。リグのエフェクターは、Rig Builder または Rig コンポーネントと同じ階層の任意のトランスフォームに追加できます。ボーンと同様に、エフェクターはゲームビューには表示されません。特別なシーンビューオーバーレイを使用することで、リグ階層に含まれるエフェクターを管理、カスタマイズできます。
エフェクターの見た目も、Effector Size、Shape、Color、Offset Position、Offset Rotation を変更することでカスタマイズできます。形状には、プロジェクトで使用可能な任意のメッシュアセットを設定できます。複数のエフェクターを一度に作成、削除、編集できます。
Rig Transform
リグの階層に含まれる特定のゲームオブジェクトが、操作のうえで重要だが、どのリグコンストレイントでも参照されない場合、Animation Rigging/Setup にある Rig Transform コンポーネントを追加する必要があります。以下の動画で示すように、2BoneIK サンプルの左右両方の足の IK ターゲット (lfik と rfik) を親トランスフォーム (ik) を使用して操作し、目的どおりの動作を実現するには、このコンポーネントを追加する必要があります。