AnimationRigging
Unity2019で使えるAnimationRigging
Animation Rigging パッケージは、アニメーション化されているスケルトンに対して実行時にプロシージャルなモーションをセットアップできるようにするものです。
一連の定義済みのアニメーションのコンストレイントを使用して、キャラクターの制御リグ階層を手動で構築することができるほか、C# で独自のコンストレイントを構築することもできます。
これにより、ワールドとのインタラクション、スケルトン変形リグ、物理演算ベースの二次モーションなど、ゲームプレイ中に各種の魅力的な表現が可能になります。
ボーンがあるものもないものも、アニメーション的なものを作れる。元となるアニメーションがないオブジェクトに対してでも作成・制御できる。
既存のアニメーションがあってもそれに制御を加えられる。
キーフレームを打つような既存のアニメーションとは違い、プロシージャル(数式やプログラムにより事前に定めた手続きに則って作成した)アニメーションを適用する。既存のアニメーションに上書きできる
ドキュメント
2020.1だとAnimationRiggingはpreviewが外れてVer1.0.3になったららしい
コンストレイント
コンストレイント(制約)と呼ばれるスクリプトを利用してアニメーションの作成や制御をおこなう。制約を追加することでアニメーションが簡単になる。
LookAtみたいに何かの方向を見続けるように頭を動かすとかそういうことだよね。
コンストレイント一覧
- Blend Constraint
- Chain IK Constraint
- Damped Transform
- Multi-Aim Constraint
- Multi-Parent Constraint
- Multi-Position Constraint
- Multi-Referential Constraint
- Multi-Rotation Constraint
- Override Transform
- Twist Chain Constraint
- Twist Correction
- Two Bone IK Constraint
Constraint Components | Animation Rigging | 1.0.3
0.2.7だとこんな感じだった
環境準備
UnityデザイナーズバイブルのAnimationRiggingを見ながら触っていく
環境
Unity2019.4
AnimationRigging0.2.7
PackageManagerでAnimationRiggingを入れる。
インポートしたらサンプルプロジェクトもインポートできるようになる
AnimationRiggingのことARって大々的に訳すの
RigBuilderとRig
RigBuilderとRigコンポーネントが基礎
RigBuilderが管理。Animatorがついている場所などにつける。AnimatorがないモデルにはAnimatorが勝手につく。
RigBuilderがついているモデルの下に空のオブジェクト作ってRigを付ける
これをRigBuilderに登録
上のほうから計算される?
ちなみにRigBuilderやアニメーションの更新タイミングはAnimatorのUpdateModeで変わるそうです。
関係性
RigはConstraintの親。複数のConstraintを子にもつグループ
ConstraintがIK的な、本当の機能を持つもの??
RigBuilder>Rig>Constraint
RigBuilderはRigを複数持てる。
RigはConstraintを複数持てる。
各種コンポーネント/Constraint
このまま行ったら教科書丸写しみたいになるので、コンポーネントだけメモしていく
基本的にVRMキャラでやったのでBone名とか参考になると思う
BoneRenderer
BoneRendererはその名の通りオブジェクト同士の親子関係と位置関係をボーンみたいに示してくれる。
Rootを全部選んで、Trandsormsに自分でドラッグしないとダメ。しかもまとめてドラッグするとき、Transdorms枠の少し上にドラッグしないと反応しない。
これで表示されたBoneを選択するとヒエラルキーのBoneに行く
TwoBoneIKConstraint
腕みたいに二つのBoneがあるものをIKで動かしてくれる。
Rootが根元、Tipが先端。Targetがターゲット
Targetの位置に合わせて動く
VRだとTargetにコントローラーの位置代わりになるものを付けたら、FinalIKとか使わなくてもとりあえず腕は動きそう
本ではRigの下にConstraintを付けるようのオブジェクトを作ってそこにつけてた。
銃を持たせる
MultiAimConstraint
SourceObjectに対してConstrainedObjectが正面を向くように回転値を操作
LookAtみたいな感じ。
ConstrainedObjectに向きを変えたいBone、AimAxisはそのボーンの前方方向をセット。
VRMだと+Zだった
Neckボーンを設定するとこんな感じになった。
肩も設定
このままだとイナバウアーするぐらい首が曲がるので、制限を付ける
SettingのMaxLimitとMinLimitを適当に設定。
これである程度の角度で回転が止まる。(設定していない肩は限界を超えて回っている)
胴もできた
VRMはこのままで良さそう
TwistCorrection
「Sourceに設定したTransformの回転を参照して、1軸だけtwistNodesの回転に適用する」(「Unityデザイナーズバイブル」377pより引用)
本だとUnityChanの胴の回転はTwistCorrectionしないと自然に見えないって書いてた。
ただ上のように通りVRMでやってみたけどうまくいかない
静止したら動く
VRMはMultiAimConstraintで普通にできたので、使う必要はないかな?
よくわからない~
MultiParentConstraint
「ConstraintObjectに登録したTransformの親をSourceObjectsに登録したTransformに設定したような挙動をする」(「Unityデザイナーズバイブル」380pより引用)
その他
AnimatorにUnityChanのWait01モーションを適用している。そのモーションに上書きするように上のIKは動いている
最後に
なんとなくAnimationRiggingの枠組みは分かった。
他のコンストレイントの機能を見ないと、やりたいことができるかわからないな〜