💡

[UE5]超やさしいユニティちゃんのセットアップ

2023/06/14に公開

はじめに

突然ですが私はUEのキャラクターアニメーションに関してはド素人です。
そんな私が「UE5でアニメーションやりたいなぁ」と思っても、F1レースのごとくピュンピュン流れてくる単語が、コントロールリグ、IKリグ、IKリターゲッタなどなど。
コントロールリグって・・・あれだろ?コントロールリグだろ?程度の知識しかなかった私ですが、都合上そんなこと言ってられなくなったので山奥で修行してきました。
この記事はその修行内容を記録したものです。

完成系

アニメーションはご覧の通り。
髪もふわふわ揺れてていい感じ!

Foot IKもばっちり!

開発環境

  • Windows11
  • UE5.1.0
  • Visual Studio 2022

用意するもの

  • ユニティちゃんの3Dアセット
  • Unity
  • KawaiiPhysics

https://unity-chan.com/download/index.php
https://unity.com/ja/releases/lts
https://github.com/pafuhana1213/KawaiiPhysics/releases/

おかずさんのKawaiiPhysicsを初めて使いましたが、ド素人の私でも使いやすい神プラグインでした。おかず様ありがとうございます。

ユニティちゃんのライセンス表記をしておきます。
大変可愛いキャラクターをありがとうございます。
いまここでUnityとUEはひとつになるのです(?)

作業開始

全体の流れです。

  1. ユニティちゃんをUEにインポート
  2. IKリターゲッタでアニメーションを書きだす
  3. アニメーションBPの設定
  4. KawaiiPhysicsで髪をふわふわにする
  5. Foot IKをつける

かなり長いですが一緒に頑張りましょう!!!!!!!

1. ユニティちゃんをUEにインポート

1.1. ユニティちゃんFBXファイルを用意

ユニティちゃんをダウンロードします。

ダウンロードしたユニティちゃんの拡張子はunitypackageというもので、このままでは天地がひっくり返ってもUEに持っていけません。
なので一度Unityに入れてしまおうということで、Unityにインポートします。
適当にプロジェクトを作成して開きます。

Assetsの場所で右クリックして、ImportPackage -> CustomPackageでダウンロードしたファイルを選択します。

インポートが完了したらプロジェクトを保存します。
Unityはもう使わないので閉じても大丈夫です。

さっき閉じたUnityプロジェクトをエクスプローラーで開きます。
すると、ユニティちゃんのアセットが展開されています。

ここから必要なものをコピーして別ファイルに持っていきます。
「Models」フォルダのunitychan.fbxと、「Models」フォルダにある「Texture」フォルダのtga拡張子のファイル全てです。

1.2. UEにインポート

UEにインポートしましょう。
お好きなフォルダでさっき入れたfbxとtgaを全て選択し、インポートしてください。
インポート設定はデフォルトのままです。
完了すると、こんな感じになります。

ん・・・?なんかマテリアルハゲてる・・・?

落ち着いてまずはフォルダ整理しましょう。
「Mesh」、「Material」、「Texture」のフォルダを作成し、それぞれ該当するものを格納します。
そしてマテリアルがおかしいので、見てみましょう。

全部のマテリアルがただの4Vectorになってますね。
これをテクスチャに直します。
初期配置されていた4Vectorを消して、Texture Sampleを配置します。
右クリックしてTexture Sampleを検索するか、「T」キーを押しながら左クリックで出ます。

こんな感じでbodyマテリアルにはbodyのテクスチャを、faceにはfaceのテクスチャを割り当てます。
ついでにテクスチャを見ると、bodyとhairにはスペキュラとノーマルがついているので割り当てます。

あとeyebaseマテリアルだけテクスチャがなかったので使いませんでした。
見た目特に変わらなかったので良いよね?

全部設定し終わったらメッシュを見てみましょう!

な、なんだそのカービィみたいなほっぺたは・・・。
邪魔なので消します。

このマテリアルはmat_cheekなので、Blend ModeをMaskedにしてオパシティマスクに0を入れます。
すると透明になります。

メッシュを見てみましょう。

お!いい感じですねぇ!
試しにビューポートに配置してみると・・・

ちょっとリアルよりですがこれでいきましょう。

2. IKリターゲッタでアニメーションを書きだす

2.1. IKリグの作成

メッシュはいい感じに用意できました。
次は何をするか。みなさん何が言いたいかもうわかってますよ。早くユニティちゃんが動いている姿が見たいんですよね?
お待たせいたしました。そんなあなたに、

てってれ~
=つ「IKリグ~~~」

「ぱてえもん、IKリグってなあに?」

Unreal Engine 5のIKリグ(Inverse Kinematics Rig)は、キャラクターアニメーションにおいて逆運動学を使用してリアルな動きを実現するための機能です。IKリグは、キャラクターの関節構造や骨格に基づいて関節の角度や位置を計算し、特定の末端(例:手や足)を目標位置に合わせます。
IKリグを使用すると、キャラクターの末端を操作する際に、その他の関節や骨格が自動的に適切に配置されます。例えば、キャラクターの手をテーブルの上に置く場合、手の位置を指定するだけで、肩や肘の関節の角度や位置が計算され、自然な手の配置が行われます。
Unreal Engine 5のIKリグは、キャラクターアニメーションのリアルさと自然さを向上させるための重要なツールです。IKリグは、ヒューマノイドキャラクター(人間のような形状を持つキャラクター)だけでなく、動物やロボットなどの様々なキャラクターアニメーションにも使用することができます。
Unreal Engine 5では、高度なIKリグシステムが組み込まれており、キャラクターアニメーションの制作や調整を容易にするための機能が提供されています。これにより、より柔軟でリアルな動きを持つキャラクターアニメーションを作成することが可能となります。※ChatGPTより

「な、なるほど~?(白目)」

という茶番は置いておき、IKリグを作成します。
「Material」、「Mesh」、「Texture」と同じ階層に「Rig」フォルダを作成します。
「Rig」フォルダの中にIK_UnityChanを作成します。スケルタルメッシュはユニティちゃんです。

2.2. リターゲティングチェーンの設定

IK_UnityChanを開いたら、リターゲティングルートを設定します。
リターゲティングルートは基本「pelvis」という骨盤のボーンに設定するものですが、ユニティちゃんにpelvisは無いので、その代わりとなる「Hips」ボーンに設定しましょう。

次にリターゲティングチェーンを設定します。
チェーンと言えば増殖するGに灰流うららを打つ感じですが、UEでは「左腕はここからここまでのボーンですよ」、「右脚はここからここまでのボーンですよ」と設定することです。
アニメーションはボーン構造に紐づいてるので、違うキャラクターになったとしても、このチェーンのおかげでアニメーションが使いまわせるようになっているわけです。

では、順番にチェーンを作りましょう。
作るチェーンは全部で7個で、次の表の通りに作ります。
※Character1という名前は省略しています。

チェーン名 開始ボーン 終了ボーン
LeftLeg LeftUpLeg LeftFoot
RightLeg RightUpLeg RightFoot
Spine Spine Spine2
LeftArm LeftArm LeftHand
RightArm RightArm RightHand
Neck Neck Neck
Head Head Head

作り方はさっきのルートの設定と似ていて、例えばLeftLegだと、「LeftUpLeg」から「LeftFoot」までを選択して右クリックし、「選択ボーンからリターゲティングチェーンを新規作成」を選択します。目標はなしで大丈夫です。

次のように設定できましたか?

2.3. IKソルバの設定

なぜここで説明しようと思ったのかはわかりませんが、IKソルバの説明の前にIKを説明します。
そもそもIKとは、Inverse Kinematicsの略で、和訳で逆運動学です。
IKの逆はFK(Forward Kinematics)です。
例えば、Tポーズから右手で自分の頭を掴むとします。

FKの場合:腕を少し上げる → 肘を曲げる → 手を頭の上に置く
IKの場合:手を頭の上に持っていく → 肘が曲がる → 腕が少し上がる

FKは手を頭の上に持っていくために付随する関節を曲げていくのに対し、IKは手を頭の上に持っていくと自然に他の関節が曲がります。
FKとIKの違いはこんなところで、本題のIKソルバとは、うまく言葉にできませんが、まあ良い感じに自然な動きにしてくれるアルゴリズムらしいです。(誰か教えて)

今回はフルボディIKというソルバを追加します。
新規ソルバ → フルボディIKを追加し、「Hips」ボーンで右クリックし、「選択されているソルバにルートボーンを設定」を選択します。

2.4. IK目標の設定

4つ設定します。

  1. LeftLeg
  2. RightLeg
  3. LeftArm
  4. RightArm

これらの終了ボーンをIK目標にします。
例として、LeftLegのIK目標を設定してみます。
LeftLegの終了ボーンは「LeftFoot」なので、LeftFootで右クリックし、「IK目標の新規作成」 → 「目標を割り当て」を選択します。

これを4つ設定すると下の画像のようになります。
黄色のボックスが両手両足にできました。

2.5. IKリターゲッタでアニメーションを書きだす

IKリグが出来ればユニティちゃんのアニメーションを書きだす準備はできました。
今回はUE5のデフォルトキャラクターManny様のアニメーションをそのままユニティちゃんにリターゲットしてみます。

その前に1つだけ調整します。
「Contents」→「Characters」→「Mannequins」→「Rigs」にあるIK_Mannequinを開きます。
新しいチェーンを追加し、次の画像のようにNeckを追加してください。

追加したら閉じて、次に
「Contents」→「Characters」→「Mannequins」→「Rigs」にあるRTG_Mannequinを開きます。

ターゲットのRigとMeshをさっき作ったユニティちゃんにします。
もしキャラが被っている場合はその下のTarget Mesh Offsetの値を変えればずらせます。

このリターゲッタで自然なアニメーションになるように調整していくわけですが、まずMannyはAポーズでユニティちゃんはTポーズなので、ユニティちゃんをAポーズに直しましょう。
さっき説明したTarget Mesh Offsetの値を0にして重ねると調整しやすいです。
また大きさも違うので合わせましょう。Target Mesh Scaleを1.2くらいにすると同じくらいになります。

編集モードにして、曲げたいボーンを選択し、調整します。
足も少し開きましょう。

私がやった調整を一応文字で書いておくと、

  • LeftUpLeg → Y-5度
  • RightUpLeg → Y5度
  • LeftArm → Y40度
  • RightArm → Y-40度
  • LeftForeArm → Z-40度
  • RightForeArm → Z-40度

アニメーションが気に食わないときはここをもう少し凝って編集しましょう。

いじいじ・・・

調整が完了したら大きさと位置は元に戻しましょう。
だいたい一緒ですね。

最後にチェーンマッピングを確認します。
ソースチェーンとターゲットチェーンが一致しているか確認してください。
おそらくNeckがHeadになっていた気がするので、修正します。

できました!
さっそくアニメーションを再生してみましょう。
アセットブラウザにあるMF_Run_Fwdをダブルクリックします。
すると・・・

まあまあいい感じでは???
他のアニメーションも確認して、大丈夫そうなら書きだします。
書きだす前にAnimationフォルダを作っておくと良いでしょう。

書きだすアニメーションは以下の7つです。

  • MF_Idle
  • MF_Run_Fwd
  • MF_Walk_Fwd
  • MM_Fall_Loop
  • MM_Jump
  • MM_Land
  • MM_Walk_InPlace

一気に選択して書きだしても大丈夫です。

書きだしたアニメーションを確認してみます。

ん・・・?なんか1つ倒れてるアニメーションが・・・

ぎ、ぎゃあぁぁぁああぁあぁぁあぁ~~~~~~~~

これはアセット詳細タブの「ルートモーション」→「Force Root Lock」をFalseにすると直ります。

ついでにアニメーションの名前もわかりやすい名前に変えましょう。
アニメーションシーケンスの接頭辞はASなので、AS_UnityChan_Idle等にしました。

3. アニメーションBPの設定

3.1. ブレンドスペース1Dの作成

止まった状態から走るアニメーションを再生するとき、加速し始めの状態で走るアニメーションを再生すると不自然になりますよね?
加速し始めは歩くアニメーションを再生し、スピードが出始めてから走るアニメーションに移行するのが自然です。
このアニメーションの移行をなめらかにしてくれるのがブレンドスペースです。

アニメーションシーケンスを作ったフォルダにブレンドスペース1Dを作成します。
名前はBS_UnityChan_Walk_Runにしました。

右下のアセットブラウザからAS_UnityChan_Walk_InPlaceを中央下のスペースにドラッグアンドドロップします。

他にAS_UnityChan_Walk_FwdAS_UnityChan_Run_Fwdもドラッグアンドドロップします。

3つのひし形が配置されたら、左のアセット詳細タブの項目を少し変更します。

  • 「Axis Settings」→「水平軸」→「Name」をSpeed
  • 「Axis Settings」→「水平軸」→「Maximum Axis Value」を500
  • 「ブレンドサンプル」→「AS_UnityChan_Walk_InPlace」→「Speed」を0
  • 「ブレンドサンプル」→「AS_UnityChan_Walk_Fwd」→「Speed」を230
  • 「ブレンドサンプル」→「AS_UnityChan_Run_Fwd」→「Speed」を500

ブレンドスペース1Dの設定は完了です。

3.2. アニメーションBPの設定

ユニティちゃんのスケルタルメッシュで右クリックし、アニメーションBPを作成します。
ファイル名はABP_UnityChanにしました。

ABP_UnityChanを開くとイベントグラフに何もないので、ABP_Mannyからコピペします。
変数が設定されていないので、灰色になっているノードを右クリックして変数化します。

全部の変数を作り終わったらコンパイルしましょう。

次はAnimGraphをコピペします。

AnimGraphにあるLocomotionMainStatesのなかにある各ステートに、さっき書きだしたアニメーションシーケンスを設定していきます。
「Locomotion」→「Idle」とダブルクリックしていくと、Idle用のシーケンスプレイヤがあるので、これをユニティちゃんのIdleに変更します。

これを他のステートでも設定します。
Walk/Runステートはブレンドスペースなので、さっき作ったBS_UnityChan_Walk_Runにします。

全部設定できたら、AnimGraphに戻って出力ポーズにノードを接続し、コンパイルしましょう。
プレビュー画面でユニティちゃんがアニメーションしてたら成功です!

3.3. 動かしてみよう!

ついにきました。
まずはキャラクターを作りましょう。
「Contents」→「ThirdPerson」→「BluePrints」フォルダのBP_ThirdPersonCharacterを複製して開きます。
名前はBP_UnityChanです。
Meshの詳細からスケルタルメッシュをユニティちゃんに、Anim Classを作成したABP_UnityChanに変更します。
コンパイルして保存したら閉じます。

最後にワールドセッティングの「Default Pawn Class」をBP_UnityChanに変更したら完了です!

プレイしてみましょう。

動いたーーーーーーーーー!!!!!!!!!!!

しかしジャンプとかしてみるとわかるんですが、ケープ何本使ったんだってくらい髪の毛がガチガチに固まってて動きません。
せっかくなら髪の毛ふわふわの可愛いユニティちゃんが見たいじゃないですか。
そうですよね?
てことで、次に行きましょう。

4. KawaiiPhysicsで髪をふわふわにする

4.1. KawaiiPhysicsプラグインを有効にする

プラグインをダウンロードします。
https://github.com/pafuhana1213/KawaiiPhysics/releases/

プラグインを入れる前にUEは一度落としておきます。
解凍して出たKawaiiPhysicsフォルダを、プロジェクトのPluginsフォルダに入れます。
Pluginsフォルダがない場合は作って入れましょう。

プラグインを入れた後に起動しようとするとビルドしなさい的なポップアップが出ると思うので、ビルドを押してしばらく待つと起動します。

プラグインを見るとKawaiiPhysicsが入っています。

4.2. KawaiiPhysicsの設定

KawaiiPhysicsはアニメーションBPの中で設定します。
イベントグラフで右クリックし、検索すると出てきます。

Main Statesから出ているノードの次にKawaiiPhysicsを接続すると使えるようになりますので、下の画像のようにつなぎましょう。

ノードの設定をしていきます。
基本的に赤枠内の値を設定すればなんとなーくいい感じにできると思いますが、ユニティちゃんの可愛さはこんなもんじゃねぇ!という方はぜひ下記の記事を参考にしてください。

https://qiita.com/YuukiOgino/items/7f3198a90dab43019f26

参考記事内に値の説明がありますので、省略します。
まずRoot Boneを設定しましょう。
「Modify Target」→「Root Bone」を「J_L_HairTail_00」にします。
値は画像のようにしました。

Leftを作ったので、これをコピーしてRightを作ります。

コンパイルしてプレイしてみましょう。
たったこれだけの設定で髪の毛が揺れているではありませんか!
KawaiiPhysicsバンザイ!!!!!

本記事はここまでにしますが、横髪とかぴょこんと出てる髪とかも設定するとよりリアルに可愛くなると思います。
好きに設定してみてください。

5. Foot IKをつける

5.1. コントロールリグを作成する

さっきは触れませんでしたが、Foot IKが設定されているのはアニメーションBPのコントロールリグノードです。
このControl Rig ClassがManny用のFoot IKになっているので、ユニティちゃんのFoot IKが効かないわけです。

なので、ユニティちゃん用のコントロールリグを作成します。
ユニティちゃんのスケルタルメッシュで右クリックしてコントロールリグを作成し、「Rig」フォルダに移行します。
名前はCR_UnityChan_BasicFootIKにしました。

CR_UnityChanを開くと例によって何もないので、これまた例によってMannyのをコピーします。
「Contents」→「Characters」→「Mannequins」→「Rigs」フォルダのCR_Mannequin_BasicFootIKのノードを全部コピペします。

コントロールリグでは、Mannyの方にあった変数が貼り付けられないので手動で作成して配置する必要があります。
1つずつMannyのを見ながら写していきましょう。
ShouldDoIKTrace変数は後で使うのでインスタンス編集可能にしておきます。

写し終わったらこんな感じになりますが、各地でボーン名が赤色になっています。

それもそのはずで、コピー元のMannyのボーン名が割り当てられているだけなので、ユニティちゃんのボーンにする必要があります。

が・・・

Foot IKの仕組みを理解すればわかるのですが、現状のユニティちゃんのボーン構造ではFoot IKは実現できません。
このまま記事に沿ってやっていけばできるようになりますが、ぜひ仕組みを理解しながらやってみてください。
こちらの動画がとても丁寧に説明されており、わかりやすかったです。
https://youtu.be/hyJ1pid0Ed0

5.2. バーチャルボーンの追加

ユニティちゃんのFoot IK用のバーチャルボーンを追加します。
ユニティちゃんのスケルトンを開きます。
ボーンのルートである「Reference」にバーチャルボーンを追加します。
ターゲットはReferenceです。

すると「VB Character1_Reference_Character1_Reference」というボーンが追加されます。
このボーンの子として2つバーチャルボーンを追加します。
ターゲットはLeftFootとRightFootです。
ついでに名前がべらぼーに長いので変えます。

  • ik_foot_root
  • ik_foot_r
  • ik_foot_l

5.3. コントロールリグの修正

コントロールリグに戻ります。
スケルトンを編集したので、コントロールリグのリグ階層を更新します。
左下のリグ階層で右クリック → 更新 → ユニティちゃんを選択します。

するとリグ階層の一番下に先ほど追加したバーチャルボーンがあると思います。

ノードを修正していきましょう。
関数のFootTrace内にもあるので見落としのないようにしてくださいね。

  • IK_foot_L → VB ik_foot_l
  • IK_foot_R → VB ik_foot_r
  • pelvis → Hips
  • foot_l → LeftFoot
  • foot_r → RightFoot
  • root → Reference

赤文字がなくなったらコンパイルして閉じ、アニメーションBPを開きます。
コントロールリグノードのクラスをCR_UnityChan_BasicFootIKに変更します。

5.4. 完成!!!!!

これで全部の設定が終わりました。
プレイしてみましょう。

でででででででででできた~~~~~~~~~~~~!!!!!!!!!!

まとめ

アニメーション初心者向けに丁寧に書こうと思ったらめっちゃ長くなってしまいました。
こりゃ書く側も記事通りにやる側も疲れますわ・・・。
なんかようやくアニメーションの入り口に立てた気がするので、銀河まで行きそうなくらい長いアニメーションの道のりを歩んでみましょうかね。
ともあれキャラが動くのはテンション上がりますね!(アニメーションの調整はだるい)

補足

完成系で見せてるユニティちゃんのマテリアルがなんか発光しているように見えるのは、最初はマテリアルをエミッシブで作成したからです。
Shading ModelがUnlitになるとアニメ調が強くなるので最初はそうしてたってだけです。

参考文献

https://gamemakers.jp/article/2022_10_24_20821/
https://namiton.hatenablog.jp/entry/2022/06/29/145424
https://unrealengine.hatenablog.com/entry/2014/04/15/184432
https://qiita.com/YuukiOgino/items/7f3198a90dab43019f26
https://blog.adglobe.co.jp/entry/2022/11/14/100000
https://youtu.be/hyJ1pid0Ed0

Discussion