Blenderで作った動物をUnityで動かしてみた

今回はblenderで作った動物のキャラクターをunityで動かしてみたのでやり方を書いていきます。

unityは2022を使用。キャラクターは以前の記事blender4.0で作った猫
この猫を、よくあるPCゲームの操作

  歩く:AWSDキー
  走る:shift押しながら
  ジャンプ:spaceキー
  カメラ:マウス     で動くようにします。

ちなみにコーディングは一切なし!
私みたいなプログラム書けないマンでもできちゃいます。

やり方は簡単。
Blenderで猫のモデルとアニメーションデータを書き出したら
unity公式の無料アセットに組み込んで、猫用にパラメーターを調整しただけ。

Unityアセットストア
image
Starter Assets – ThirdPerson | Updates in new CharacterController package | Unity公式アセット | Unity Asset Store Get the Starter Assets – ThirdPerson | Updates in new Charac

このマネキンみたいなキャラクターを猫に置き換える。

シンプルな3Dアクションゲームを作りたいときや
とりあえず動いてる様子を見たいときやおすすめ。

Blenderから猫のデータをエクスポートする

猫の3Dモデルとモーションをfbx、
テクスチャを.jpgや.pngなど画像データに書き出し(エクスポート)します。

猫のアニメーションとモデルをエクスポート

今回は30fpsでこんなアニメーションを作って、blenderのアクションに保存しておきます。

ルートの移動値を抜いてその場で動いてます。StarterAssetsの仕様に合わせています。

これらのアニメーションをNLAエディターのストリップに登録してfbxに書き出していきます。
NLAエディターに要らないストリップがあったら削除しておきます。

NLAエディター要らないストリップを削除

NLAエディターをキレイにしたらアニメーションを放り込んでいくんですが
その前にアニメーションをDEFボーンにベイクしておきます。

アニメーションをDEFボーンにベイクする

DEFボーンの表示方法:リグを選択して、ボーンコレクション > DEF の目のアイコンをクリック。

DEFボーンというのは、モデルにウェイトを振って直接動かしてるボーンです。
UnityにはこのDEFボーンを持っていきます。

ふつうにアニメーションを作っただけではDEFボーンは何も記録されてません。
なのでベイク処理をかけてDEFボーンにもキーが打たれた状態にしときます。

DEFボーンを表示したら、Unityに持っていくアクションを選択。
ここでは待機モーション(Idle)を選択します。

ポーズモードでリグをDEFボーンごと全選択 > ポーズ > アニメーション > アニメーションをベイク

開始(終了)フレーム:アニメーションのフレーム数を入力
フレームステップ:1を入力(1フレームごとにキー打ちますよの意)
選択ボーンのみ:☑入れる
ビジュアルキーイング:☑入れる
データをベイク:ポーズを選択

※ベイクしなくてもfbxにできちゃったりしますが、
Blenderの見た目通りに出力できない事もあるのでベイクしといた方が安心。

ベイクするとActionという名前のベイクされたアクションができます。

このベイクされたアクションをNLAエディターに入れます。「ストリップ化」ボタンをクリック。

待機モーションなのでストリップ名をIdleに変えています。ストリップ名はunityで表示されるのでわかりやすい名前にしておく。
左側のトラックも名前変えていいけどUnityでは表示されない。

これで待機アニメーションのストリップ化ができました。
Unityにもっていく全てのアニメーションを、これと同様の手順でストリップ化していきます。

アクションを一通りストリップ化したらこんな感じ。

そうしたらこのストリップたちを、モデルと一緒にfbxに書き出していきます。

猫のモデルとアニメーションをfbxでエクスポート

オブジェクトモードでモデルとリグを選択して、
ファイル > エクスポート > fbx をクリック。

fbxをエクスポートするウィンドウが出ます。
右側にfbxの設定欄があるのでunityに持ってく用の設定をします。

■内容
対象:選択したオブジェクトに☑入れる
オブジェクトタイプ:アーマチュアとメッシュを選択



■トランスフォーム
前方:Yが前方
上:Zが上

■アーマチュア
変形ボーンのみに☑入れる
リーフボーン追加に▢チェック外す


■アニメーションをベイク
NLAストリップに☑入れる
全アクションに▢チェック外す


サンプリングレート:1

簡略化:0.1(デフォルトの1でもいいです。数値が大きいほどfbxの容量が軽くなりますがモーションの精度が下がってノイズが出ます。)

モデルやモーションが大量にある場合は分けてfbxにした方が後々便利ですが
今回は数が少ないのでまとめて1つのfbxにしてます。
これらの設定をしたら任意のフォルダ場所にfbxをエクスポート。

Cat.fbxという名前でエクスポートしました。
これでfbxを用意する工程は完了。

テクスチャを画像データでエクスポートする

次は猫のテクスチャを.jpgや.pngでエクスポートします。
(既に画像データをテクスチャとして読み込んでいる場合、その画像をUnityで使えばOKなのでこの工程は不要)

UVエディターで書き出すテクスチャを選択。
ここではCatBaseColorというテクスチャを選んでます。

UVエディターの 画像 > 名前をつけて保存
PNGファイルで任意の場所に保存します。

Blenderの作業はここまで。
次はUnityの作業に入ります。

UnityにStarterAssetsを読み込む

Unityの新規プロジェクトを作成

新規のUnityプロジェクトを作ってStarterアセットを読み込みます。
UnityHubを起動。

「新しいプロジェクト」をクリック。

3Dのテンプレートを選択して、プロジェクト名と保存場所を設定してプロジェクトを作成。
ここではCat projectというプロジェクト名にしてます。

プロジェクトが作られるまで少し待つ。

プロジェクトができたらこんな感じの画面に。

このプロジェクトにStarterAssetsを入れます。

UnityアセットストアからStarterAsettesをダウンロード

↓ダウンロードページ

Unityを開いたままブラウザでダウンロードページを開いて、「Add to My Assets」ボタンをクリック。

なんか上から出てくるんでOpen in Unityをクリック。

「Unity Editorを開きますか?」って聞かたら開くを選択。

Unityプロジェクトに戻ります。
パッケージマネージャーが開いてるので右側の「ダウンロード」をクリック。

パッケージマネージャーをうっかり閉じちゃった場合

ウィンドウ > パッケージマネージャーで開けます。

マイアセットの中にStarterAssetsが入ります。「ダウンロード」をクリック。

「インポート」をクリック。

UnityPackageManagerをアプデしますかみたいな警告が出たら
「インストール/アップグレード」をクリック。

バックエンドを有効にしますかみたいな警告は「YES」をクリック。

Unityが再起動されます。

再起動中…

再起動が終わったら、パッケージマネージャーのマイアセットタブからStarterAssetsを選んで、「インポート」をクリック。

UnityPackageManagerをアプデしますかみたいな警告が出たので
「インストール/アップグレード」をクリック。

こういうウィンドウが出ます。「インポート」をクリック。

プロジェクトウィンドウのAssetsフォルダの中にStarterAssetsというフォルダができてればインポート完了。

これでStarterAssetsのデータを読み込めたので、次はこのデータをシーンとヒエラルキーに入れていきます。

サンプルシーンを開きます。assetsフォルダの
Assets > StarterAssets > ThirdPersonController > Scenes > Playground.unity  にあるPlayground.unityをWクリック。

ヒエラルキーにアセットが読み込まれて、シーンにステージが表示されます。
しかし……

ぎゃああああ画面がピンクの海に!

どうやらマテリアルが迷子になってるようです。(ちょっと古いバージョンのUnity使ってるから?)
よくわかりませんがレンダーパイプラインというのが切れてるっぽい。とりあえずパスを通します。

ウィンドウ > レンダリング > レンダーパイプラインコンバーター をクリック。

「Built-in to URP」を選択。
チェックいれるやつ下まで全部☑入れて Initialize Convertersをクリック。

少し待つとコンバーターが初期化されます。
Convert Assetsをクリック。

シーンのテクスチャが正常に表示されてれば成功!
レンダーパイプラインコンバーターのウィンドウは閉じてOK。

この時点ですでにキャラクターをキーボードで操作する仕組みができてます。
シーンの再生ボタンを押して確認できます。

AWSDキーで移動、shiftキー押しながらで走る、スペースキーでジャンプ、マウスでカメラ操作

次はUnityに猫を連れてきます。

Unityに猫のfbxとテクスチャを読み込む

まず猫のデータを入れるフォルダを作る。

Assetsフォルダの上で右クリック > 作成 > フォルダ で新しいフォルダを作ります。
フォルダ名を任意の名前をつけます。ここではCatというフォルダに命名。

Catフォルダに猫のfbxとテクスチャ画像を入れます。
ドラッグ&ドロップで直接放り込む。

放り込んだfbxを選択してインスペクターを見るとfbxの中身を確認できます。
Animationのタブでアニメーションも再生できるので、出力ミスがないかここで確認できます。

続いてこの猫をステージに配置して、マネキン君と置き換えていきます。

猫とマネキン君を入れ替える

まずヒエラルキーに猫を入れます。
ヒエラルキーとはシーンにあるオブジェクトの一覧みたいな感じのやつです。

アセットフォルダのCat.fbxをドラッグ&ドロップでヒエラルキーに放り込みます。
マネキン君と同じ場所に猫が出ます。

このヒエラルキーに入れた猫を編集します。
でもそのままだと編集できないのでプレハブを展開します。

ヒエラルキー > Catを右クリック > プレハブ > 展開 

Catの字が青から白になればOK。

そうしたらマネキン君のプレハブも展開します。
ヒエラルキー > PlayerArmatureを右クリック > プレハブ > 展開 

こちらもPlayerArmatureの字が白になったらOK。

猫のモデルとリグをマネキン君と入れ替えます。マネキン君のモデルとリグは削除してOK。

PlayerArmature
 ┗Geometry
  ┗ここに猫モデル入れる
 ┗Skeleton
  ┗ここに猫リグ入れる

これで猫が動かせるようになったはず。いったんシーン再生して確認。

なんか変だけど動いたー!

ひとまず移動できるようになりましたが、このままだと
 ・ホバー移動してる
 ・猫がカメラの下すぎて見づらい
といった問題があるので直します。

カメラ位置を猫に合わせる

視界が悪いと他の修正作業もダルいのでカメラから直します。

デフォルトのカメラは人間の背丈に合わせられてるので、背が低い猫はカメラ外にいってしまう訳です。
なのでこれを猫の高さに下げます。

ヒエラルキー > PlayerArmature > PlayerCameraRootを選択 > インスペクター > トランスフォーム のY位置を下げます。

これだけでも十分見やすいカメラになりますね。
さらにもう少し細かい調整をするときは下記のパラメーターをよく使います。

よく使うカメラ調整① 細かい位置調整

ヒエラルキー > PlayerFollowCameraを選択 > インスペクター > CinemachineVirticalCamera > Body

減衰:カメラが猫に追従する速度。数値が小さいほど速く、大きいほど遅くなる。
Camera Side:-1 ~ 1 で左肩視点↔右肩視点をずらす。猫の動きに対して左右にずらす。
CameraDistance:カメラと猫の距離

よく使うカメラ調整② 上下角度制限の変更

ヒエラルキー > PlayerArmatureを選択 > Third Person Controller > Cinemachine

Top Clamp:カメラの最大上向き角度
Bottom Clamp:カメラの最大下向き角度

猫みたいに視点が低いキャラクターはカメラが地面に埋まりやすいので制限するのもヨシ。

移動に合ったアニメーションを再生する

アニメーションを再生してホバー移動を直します。どこを直すのか先に言うと

ヒエラルキーのPlayerArmatureに刺さってる、
「アバター」に猫用のアバターを設定して
「コントローラー」に猫のアニメーションを入れます。

猫用のアバターを設定

アバターというのは、キャラクターの骨格設定みたいなやつです。
アセットから猫のfbxを選択して、インスペクターのRigメニューを開きます。

アニメーションタイプ:ジェネリック(ヒト型のキャラクターならヒューマノイドにする所)
アバターの定義:このモデルから作成  にして「適用する」をクリック。

するとアセットにCatAvaterというアバターが作られます。

このCatAvaterをPlayerArmatureに刺します。
ヒエラルキー > PlayerArmatureを選択 > インスペクター > Animator > アバター
の◎マークを押してCatAvaterを選択

これでアバターの設定完了。
次はコントローラーも猫用に置き換えます。

コントローラーに猫のアニメーション設定

先にループアニメーションを設定しておきます。

  1. アセットのCat.fbxを選択して
  2. インスペクターのAnimationタブを開く。
  3. 待機や歩きなど、ループ再生するアニメーションを選択して
  4. 「時間をループ」に☑入れて
  5. 適用

③でループ再生させたいアニメーションすべてにこの設定をします。 

このループ化したモーションをコントローラーに入れていきます。
ヒエラルキー > PlayerArmatureを選択 > インスペクター > Animator > コントローラー
に刺さってるStarterAssetsThirdPersonというのをWクリック。

アニメーターというウィンドウにこんなのが出ます。
アニメーションの繋がり図みたいなもんですね。

これの中身を猫のアニメーションに入れ替えていきます。

最初に待機~歩く~走るアニメーションを入れ替えます。
アニメーターの「Idle Walk Run Blend」を選択、インスペクターのBlend TreeをWクリック。

するとBlendTreeが開きます。
キャラクターの移動速度に応じて「待機~歩き~走り」が出るようブレンドしてます。
これに猫のアニメーションデータを上書きします。

◎マークから上書きしてもいいけど、猫のfbxから直接ドラッグ&ドロップでアニメーションを放り込むと楽。

Idle→猫の待機に上書き
WalkN→猫の歩きループに上書き
Run_N→猫の走りループに上書き

同じ要領でジャンプも上書きします。
アニメーターの「JumpStart」を選択、ジャンプはブレンドじゃないのでインスペクターに直に上書き。

同様にジャンプの落下アニメーションも上書き。
アニメーターの「InAir」を選択して、インスペクターのモーション:JumpStartを猫のジャンプ空中モーションで上書き。

ジャンプの着地モーションも猫に上書き。
アニメーターの「JumpLand」を選択、インスペクターのBlend TreeをWクリック。

BlendTreeが開くので猫の着地アニメーションを上書きします。

着地しながら止まる・歩く・走るの3つのブレンドになってます。
しかし今回の猫は着地アニメーションを1つしか用意してないので、とりあえず3つとも同じ着地アニメーションを入れときます。
実質ブレンドしてないのと同じになっちゃいますが着地はできるので今回はこれでヨシ。

アニメーションの遷移を設定する

「歩き」から「ジャンプ」が出るとき、アニメーションがどれくらい滑らかに移り変わるか設定します。
「Idle Walk Run Blend」と「JumpStart」の間の矢印をクリックしてインスペクターを確認。

アニメーションのタイミングや遷移の長さを調整して、プレビューを見ながらイイ感じのタイミングを探ります。

移り変わり時間が長いほど滑らかにアニメーションが切り替わりますが、動きがヌルくなります。
実際にゲームを動かしながら調整した方がやりやすいんで今の段階では仮設定でいいです。

これを他の矢印全部にやります。

これで猫のアニメーションが再生されるようになる。
シーンを再生して確認します。

一気にゲームらしい見た目になった!

大筋はこれでできたので、あとは細かい調整だけ。
・移動が速くて足が滑ってみえる
・猫らしくジャンプ力上げたい
・ジャンプで足が地面に埋まる

このへんを調整していきます。
猫の体形に合ったパラメーターを入れてあげる感じです。

猫の体形に合わせてパラメーターを調整する

移動速度を変える

デフォルトの移動速度が猫には速すぎたので遅くします。

実際のゲーム制作では移動速度を決めてからアニメーションを合わせた方がいいですが、
今回はとりあえず破綻しない絵で動かすのが目的なので移動速度をアニメーションに合わせます。

ヒエラルキー > PlayerArmature選択 > インスペクター > Third Person Controller 

Move Speed:0.8 (歩く速度)
Sprint Speed:2 (走る速度) を今回は入力。

続いて歩き・走りのアニメーションを出すスピードも遅くします。

アニメーターウィンドウ > Idle Walk Run Blendを選択 > インスペクター > Blend TreeをWクリックして開く。

walkモーションのThresholdを0.7(速度0.7のとき歩く)
TrotモーションのThresholdを2(速度2のとき走る)   を入力。

基本的にさっきThird Person Controllerで入力した速度を入れればOK。

ジャンプ高さ調整

猫らしくジャンプ力を上げます。

ヒエラルキー > PlayerArmature > インスペクター > Third Person Controller

Jump Height:ジャンプの高さ
Jump Timeout:ジャンプしてから次にもう一度ジャンプできるクールタイム的なやつ。
Fail Timeout:段差から落ちて落下に移り変わる時間
Grounded Radius:接地判定球の半径。大きいほど多少地面から離れても着地してる判定になる。

この緑色の球が接地判定球。

今回はJump Heightの数値を上げて高くジャンプできるようにしました。

ジャンプの足埋まりを直す

着地したのに落下モーションの影響が残ってると足が地面に埋まります。
アニメーターのモーション間の矢印を選択して、アニメーションのブレンド具合を調整します。
仮設定したブレンドを細かく調整する形です。

今回は早めに待機モーションに切り替わるように調整。イイ感じのブレンド具合を探ります。
ジャンプ開始で足が埋まる場合も同様に調整します。

これで歩きもジャンプも自然に動けるようになりました!
…平地では。

壁や障害物があるところだと挙動が怪しいので地形アタリを調整します。

地形アタリ調整

デフォルトの地形アタリが人間の体形なのでかなり縦長。
このままだと天井にひっかかったり壁に埋まったりするので猫の体形に合わせてあげます。

ヒエラルキー > PlayerArmature > インスペクター > Character Controller

中心:地形アタリの中心座標
半径:地形アタリの半径
高さ:半径より大きくすると縦長になる

高さを下げて、球の位置と大きさを猫に合わせたらこんな感じ。

これで埋まったりしなくなった。

完成!

自然な動きになるよう調整できたら完成!

最低限の要素だけで作りましたが、これだけ動けば簡単なアクションゲームは作れますね。

足遅いからもっと走ってる動きにすればよかったなーとか、
いろいろ直したい点はありますが
そういう物足りなさに気づくためにも、アニメーションがある程度できたら一旦Unityに組んだほうが効率いいですね。

PAGE TOP