Animation Riggingでキャラクターに銃を持たせてみる
Animation Riggingとは?
以下原文ママ
Unity 2019.1 向けの Animation Rigging パッケージは、アニメーション化されているスケルトンに対して実行時にプロシージャルなモーションをセットアップできるようにするものです。一連の定義済みのアニメーションのコンストレイントを使用して、キャラクターの制御リグ階層を手動で構築することができるほか、C# で独自のコンストレイントを構築することもできます。 これにより、ワールドとのインタラクション、スケルトン変形リグ、物理演算ベースの二次モーションなど、ゲームプレイ中に各種の魅力的な表現が可能になります。
Unity内のオブジェクトにリグを設定して動かしたりIKを設定できたりします。今回はその機能を使ってキャラクターに銃を持たせるサンプルを作ってみます。
今回のサンプルで使用しているアセットはこちら
(別にこのアセットである必要はないです)
Packageのインポート
まだPreviewパッケージなのでPreviewを有効にして「Animation Rigging」をインポートします
シーンをセットアップ
とりあえず、キャラクターと適当な待機モーションを設定したキャラクターをシーンに配置します。
Breaking Badのウォルター・ホワイトっぽいキャラ。この姿勢の状態で銃を持たせたいと思います。
ボーンを表示してみる
とりあえず最初にエディタ上で操作するボーンを表示したいと思います。Bone Rendererコンポーネントを使用することでサクッと表示できます
今回動かす肩→肘→手のボーンを表示してみます。
同様の手順で右手側も表示してみましょう。
Rig BuilderとRigの設定
まずは銃を持たせたいキャラクターに「Rig Builder」コンポーネントをアタッチします。Rig LayerにRigを設定したオブジェクトを設定することで実行されます。
次に持たせたいオブジェクトをキャラクタの階層に配置します。
適当に銃の高さを調整しておきます。これは後からでも調整できるのでおおよその位置で。
次にキャラクターの階層に空のオブジェクトを作成し「Rig」コンポーネントをアタッチします。今回のサンプルでは「HandGunRig」という名前にします。
Rigコンポーネントはそのコンポーネントの子で設定したリグのWeightを変更することができるコンポーネントです。 そしてこのRigコンポーネントがアタッチされているオブジェクトを「Rig Builder」に設定しておきます。
Two Bone IK Constraintを設定する
先ほど作った「HandGunRig」の子オブジェクトに空のゲームオブジェクトを作り、「Two Bone IK Constraint」をアタッチします。名前は「RightHandRig」にしておきます。
この「Two Bone IK Constraint」コンポーネントを使用することで2つのボーンのFKを指定したゲームオブジェクトをターゲットにして制御できるIKに変換することができます。
右腕を動かしたいので肩、肘、手をそれぞれRoot、Mid、Tipにわたします。
「Source Objects」にターゲットとなるゲームオブジェクトを設定するので、先ほど配置した銃の子オブジェクトに空のゲームオブジェクトを配置してそれを指定してあげます。名前は「RightHandTarget」とかに設定しておきます。
この「RightHandTarget」を「Two Bone IK Constraint」の「Source Objects」に設定します。
で、ここまで設定したら一度実行してみましょう。
一応手は銃に向かって伸びてますが位置や角度がおかしいので「RightHandTarget」のTransformを調整しましょう。実行しながら変更しCopy ComponentでCopy→終了してPasteとやるとやりやすいです。
銃が動いた場合でも追従させる
「RightHandTarget」を動かすとその位置に腕が動いてくれるのですが、親となる「銃」を動かしても追従してくれません。
この問題を解消するには親である銃に「Rig Transform」をアタッチしてあげます。
これで銃に追従するようになりました!
肘の広げ方が気に入らない場合、「Source Objects」のHintを調整してみましょう。右ひじ付近に空のゲームオブジェクトを作り、Hintに渡します。
これで肘の開き方を調整することができるようになります。
左手にもリグを設定
右手でやったことと同じ処理を左手にも設定します。やった内容のコピペで大体いけると思います。
細かい位置を調整してあげれば完成です。
ちょっと他アニメーションと組み合わせてみました。銃が固定されてちょっと不自然ですがwまぁこれは後でなんとかするということで。