actionScript書きの日記

アラフォーFlashデベロッパのブログ。actionscriptやobjective-cを経て、現在はUnity、Spine、AfterEffectsがメイン。

Unity2019でPreview版のAnimation Riggingを使って、SDUnityちゃんのモデルを動かしてみる

Animarion Riggingの紹介ブログを見た際に「ついにUnityでもリギングができるようになったのか!」とwktkしたが、この期待は半分は的中で半分は外れだった。

自分としては、例えば一体化された人型の3Dモデルにボーンを埋め込んで動かすみたいなことができるのかと思ったが、現状ではできなさそうである。あくまでボーンとして認識できるのはTransform単位であり、1Transform内に複数のボーンを存在させることは出来ない。(もしこれができれば、ProBuilderで作成した簡易モデルにボーンを入れ込んでぐにゃぐにゃ動かすみたいなことが出来て「Unity無敵じゃん!」とか思ってたのだが。。。)

いや、自分ができないと思っているだけで、実はできるのかもしれないのだが、2019年6月16日時点ではできないと自分の中では結論づけている。今後のバージョンアップか情報収集に期待である。

 

というわけで、SD-Unityちゃんのモデルを使うことにした、のだが、悲しいかな3Dモデルに関しては素人同然、突然パーツの移動ができなくなるなどの不具合が続出した。以下は自分なりの手順。もっと洗練された方法でいろいろ出来る人もいるだろう。

 

基本設定

1.ボーンの設定を行う

HierarchyウィンドウでCreate Emptyから空のGameObjectを作成し、名前を「All」とする。その中にSD Uinityちゃんの3Dモデルを配置する。

アニメーションの設定がされているものだとうまく動かせなかったりするので、「UnityChan/SD_Kohaku_chanz/Models」内から「Utc_sum_humanoid」を配置する。

 

f:id:goodbyegirl1974:20190616220417p:plain

 

2. 作成した「All」に、Inspecrtorウィンドウから「Animator」「Bone Renderler」「Rig Builder」をAdd Componentする。

 

3. ボーンとして機能させたいTransformを、Bone Renderlerの「Transforms」に登録していく。今回は足のパーツのみ登録した。

f:id:goodbyegirl1974:20190616220714p:plain

 

4. 「All」の下にもう一つ空のGameObjectを作成し、名前を「Rig」とする。その下に空のGameObjectを作成して名前を「RIghtLeg」とする。
更にその下に空のGameObjectを2つ作成し、名前を「Target」「Hint」とする。

f:id:goodbyegirl1974:20190616220953p:plain

Rigの設定完了時のHierarchyウィンドウ

5. 「Rig」にAdd Componentで「Rig」を追加する。

f:id:goodbyegirl1974:20190616221128p:plain

 

6.「All」にAdd Componentした「Rig Builder」の「Rig Layers」に「Rig」を設定する。

f:id:goodbyegirl1974:20190616221311p:plain

 

これで、「Rig」以下に配置したオブジェクトを使用して様々なRigの機能を実装することが出来る。

これらは原文だと「Constrain(制約する)」という表現をされているけれども、その名の通り各ボーンの動きに制約を追加するのが主な機能となる。例えば公式のサンプルでも触れられている「Two Bone IK Constraint」について見てみよう。

 

Rigの実用例(Two Bone IK Constraint)

「Two Bone IK Constraint」は、3つのパーツ内に「親・子・孫」の関係を持たせるためのコンポーネントとなる。例えば脚の「もも・すね・つま先」などが具体例となろうか。

ここでは「RightLeg」 に「Two Bone IK Constraint」のコンポーネントを付与した。

Inspector上の「Root・Mid・Tip」がそれぞれ、親、子、孫に相当する。Rootに「Character1_RightUpLeg」、Midに「Character1_RightLeg」、Tipに「Character1_RightFoot」を設定した。

「SourceObject」内の「Target」「Hint」にはそれぞれ「RightLeg」の下に入っている「Target」「Hint」をアサインした。設定完了後の画面は以下のようになる。

f:id:goodbyegirl1974:20190616222555p:plain

ここで「Target」と「Hint」がどんな機能を担うのかが分からずに苦戦したが、Targetの位置や回転に「Tip」が追随し、Hintの位置や回転に「Mid」が追随する、ということになる。この設定をすることで各パーツ「Character1_RightUpLeg」、「Character1_RightLeg」、「Character1_RightFoot」は個別には動かせなくなり、「Target」と「Hint」を操作して動きを実装する。

実際に動かしてみたところ、「Target」オブジェクトを動かすことで、右足の3つのパーツが連動して動くことが確認できた。

ここで悩んだのが、これらの機能がUnityを再生しないと有効にならないということ。しばらくあーだこーだと動かして「全然リギングじゃないじゃん。。。」と途方に暮れていたが、Unityを再生すると脚の位置が「Target」と「Hint」に追随していることに気づいた。でもこれでどうやってアニメーションとか作成するんだろ。。。。

 

まとめ

Transformごとにボーンとして設定し、「Rig Buider」と「Rig」を使用してRig関連のコンポーネントを実装する、という流れが分かれば、使い方は見えてくる。Constraintに関してはいくつかの種類が存在しているようなので、追っていろいろ見ていきたい。あとやはり現状の仕様でどうやって動きを創っていくのかは課題。ここはいろいろと試行錯誤が必要だろう。Unityを再生状態のままにして、Animationの編集って出来るのか??

 

参考にした記事

blogs.unity3d.com

docs.unity3d.com