Blenderで作ったモデルをUnityで動かしてみる

はじめに

本投稿は TECOTEC Advent Calendar 2025 の8日目の記事です。

こんにちは。システム開発第一事業部の神野です。 普段の業務はJavaScriptを用いたWebサイトの作成などが主ですが、少し前まではUnityを用いたアプリ開発を行っていました。

業務内容が変わってもUnityの操作を忘れないようにと、個人でUnityアプリの開発を行ったりしているのですが、今回はそのひとつとして、以前から興味があった『3DモデルをUnityで動かす』ということに挑戦してみました。

BlenderのモデルをUnityに持って行って動かしてみたいと考えている方の参考になれば幸いです。

開発環境

・OS:Windows

・Blender 3.3.1

・Unity 2022.3.42f1

完成形

今回は単純なおばけのモデルに、Unity上で以下の動作をさせることをゴールとします。

・ふわふわ揺れながらWASDキーで移動

・Spaceキーを押すとものを拾い上げる動作をする

前提

・Unityプロジェクト作成済み

・モデル作成済み or 既存モデル使用

今回は画像のようなおばけのモデルを使用します。

足のボーンは省略、頭と胴体が前後左右に傾き、直線の腕が回るだけの簡単なモデルです。 ものを拾い上げる動作をスムーズにするために、胴体のボーンは少し分割しました。

使用するモデル(おばけ)

Blenderからモデルを出力

でははじめに、Blenderで作成したモデルをUnity向けに出力します。

Blenderの画面左上のメニューから、ファイル→エクスポート→FBX (.fbx)を選択します。

するとファイルビューの画面が出てくるので、右側の設定を以下の画像のようにします。

保存したい場所を選んで「FBXをエクスポート」ボタンを押すと、モデルの出力は完了です。

モデルをUnityへインポート

次に、先ほど出力したモデルをUnityへインポートします。

Unityプロジェクトを開き、Projectに先ほど出力したファイルをドラッグアンドドロップすると、Assetsフォルダ内にモデルのオブジェクトができます。

オブジェクト以下に、アーマチュア、マテリアルなどの項目ができていればOKです。

モデルを選択し、InspectorからRigを選択、Animation Typeを確認します。

ここがGeneric以外になっていたら、Genericに変更してください。

※人型モデルの場合はHumanoidを選択しますが、今回はボーンの構成が人型モデルと異なるためGenericにします。

モデルのオブジェクトをHierarchyにドラッグアンドドロップで持ってくると、シーンにモデルが表示されます。

モデルのアニメーションを作成

1. 静止&移動時のアニメーションを作成

ここからはこのモデルに実際にアニメーションをつけていきます。

Animationウィンドウを開いた状態でHierarchyのモデルを選択すると、そのモデルにアニメーションを登録する準備ができます。

(Animationウィンドウが画面上にない場合、Unity上部のメニューのWindow→Animation→Animationで開くことができます。)

最初は何もない状態なので、Createボタンを押して新しいAnimation Clipを作成します。

ファイルビューが出てきたら、名前を付けて保存します。

今回は静止&移動のときのふわふわした動きを作りたいので、idle.animという名前で保存しました。

AnimationウィンドウにAnimationを作成する設定画面が現れるので、左上の録画ボタン(赤丸)をONにします。

この状態でモデルを動かすことで、自動的に動きの状態を記録してくれます。

試しに左腕を前に伸ばすように動かすと、Animationウィンドウで0秒の時の動作として記録されています。

ではここから、おばけらしく腕を前に伸ばして上下にふわふわと揺れる動きを作るため、以下のように動きを登録します。

・0:00:腕を前方へ回転。

・0:30:モデル全体を少し地面から浮かせるように上方向へ移動。

・1:00:0秒のときの動きに戻す。

Animationウィンドウで時間が表示されている帯をクリックして、動きを登録したい時間に縦線を合わせてからモデルを動かすことで、経過時間ごとのモデルの動きを登録できます。

1:00では0:00と同じ動きを登録したいのですが、0秒の一番上のひし形を選択した状態でコピー、縦線を1.0秒に合わせた状態でペーストすると、0秒に登録している動きをそのまま全部1.0秒の動きとしても登録できて簡単です。

上記3か所で動きを登録して、Animationウィンドウは画像のようになっています。

このアニメーションはループさせたいので、Projectにあるidle.animをクリックし、InspectorからLoop TimeをONにします。

これで静止&移動時のアニメーションが完成しました。

Animationウィンドウの再生ボタンを押して、現状のアニメーションを確認できます。

2. ものを拾い上げるときのアニメーションを作成

では次に、ものを拾い上げるときの動作を作っていきます。

Animationウィンドウで、現在のAnimation Clipの名前が表示されているドロップダウンリストをクリックすると、Create New Clipから新しいAnimation Clipを作成できます。

新しいAnimation Clipにはpick.animという名前をつけて保存しました。

静止&移動時のアニメーションを作成したときと同様、録画ボタンをONにした状態で以下のように動きを登録します。

・0:00:腕を前方へ回転(静止&移動時のアニメーションの0.0秒と同じ)。

・0:15:頭と胸を前方へ少し傾ける(30~40度程度、まだお辞儀しきらないくらい)。

・0:30:胸を直角近くまで曲げ、頭もさらに前方へ傾ける。腕の角度も調整し、地面と大体垂直になるように動かす。

・1:00:0.0秒のときの動きに戻す。

この動きはループさせたくないため、もしInspectorのLoop TimeがONになっていたらチェックを外してください。

これで、ものを拾い上げるときのアニメーションも完成です。

アニメーション遷移を作成

「静止&移動時のアニメーション」と「ものを拾い上げるときのアニメーション」ができたので、次はこのふたつを繋ぎ合わせて遷移できるようにします。

アニメーションの遷移はAnimator Controllerで作成するので、新しくAnimator Controllerを作ります。

Projectで右クリックしてメニューを表示し、Create→Animator Controllerを選択します。

今回はobake_motionという名前にしました。

このAnimator Controllerに、先ほど作ったふたつのAnimation Clipをドラッグアンドドロップしてステートを作ります。

idleとpickのステートが作成できたら、Animator Controllerをモデルにドラッグアンドドロップしてアタッチします。

モデルを選択した状態で、Animatorウィンドウからアニメーション遷移の設定をしていきます。

(Animatorウィンドウが画面上にない場合、Unity上部のメニューのWindow→Animation→Animatorで開くことができます。)

Animatorウィンドウでidleステートを右クリック、Make Transitionを選択するとidleステートから矢印が出るので、それをpickステートまで持っていき、クリックで決定します。

今回はSpaceキーを押したときにidle→pickの遷移を発生させたいので、Animatorウィンドウ左側のParametersの+ボタンのドロップダウンリストからTriggerを選択し、PickTriggerという名前で追加します。

このTriggerを、idle→pickの遷移条件として設定します。

idle→pickの矢印を選択し、InspectorのConditionsに先ほど追加したTriggerを設定します。

これで、Triggerを発火したときにidle→pickの遷移が発生するようになりました。

次に、pick→idleの遷移も作っていきます。

idle→pickの遷移を作ったときと同様に、Animatorウィンドウでpick→idleの矢印を作ります。

pick→idleの遷移は、pickのアニメーションが終わったら自動的に発生させるようにしたいので、パラメータは作成しません。

pickのアニメーションが1回分再生されたらidleに遷移したいので、pick→idleの矢印を選択して、InspectorのSettingsからExit Timeを1に設定します。

これで、作成したふたつのアニメーションの遷移が作成できました。

Unity上部の再生ボタンを押してシーンをスタートさせた後、AnimatorウィンドウのParametersからTriggerをクリックすると、idle→pickの遷移が確認できます。

モデルを操作するスクリプトを作成

アニメーションが流れで動くようになったので、ここからはアニメーションをつけたモデルを操作するためのスクリプトを作成します。

Projectを右クリック、Create→C# Scriptを選択して新しいC#スクリプトを作成したら、ドラッグアンドドロップでHierarchyのモデルにアタッチします。

このスクリプトで実現したいのは以下2点です。

・WASDキーでモデルを前後左右に移動

・Spaceキーでidle→pickのTriggerを発火

これを踏まえて、スクリプトは以下のようになります。

using UnityEngine;

public class ObakeController : MonoBehaviour
{
    private float moveSpeed = 3f;
    private Animator animator;

    private void Start(){
        animator = GetComponent<Animator>();
    }

    private void Update(){
        float h = Input.GetAxis("Horizontal");  // A, Dキーで横移動
        float v = Input.GetAxis("Vertical");    // W, Sキーで縦移動

        Vector3 velocity = new Vector3(h, 0, v);
        float move = velocity.normalized * moveSpeed * Time.deltaTime;

        // 移動する方向に回転
        transform.LookAt(transform.position + move);
        // 移動
        transform.Translate(move, Space.World);

        // Spaceキーでidle→pick
        if(Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetTrigger("PickTrigger");
        }
    }
}

これで、WASDキーで移動、Spaceキーでものを拾う動作ができるようになりました。

最初に設定したゴールに到達です。お疲れ様でした!

まとめ

今回は、Blenderから3Dモデルを出力して、Unityで簡単なアニメーションをつけるところまでを行ってみましたが、一度方法を覚えてしまえばアニメーションの作成自体は比較的簡単にできるなと思いました。 (モデルが単純な構成だったということもあると思いますが…)

動きをつけられるというだけでアプリ制作の幅がぐっと広がると思うので、これを用いて次は簡単な3Dゲームが作れればなとぼんやり考えています。

この記事がUnityアプリ制作の一助になれば幸いです!

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。 tecotec.co.jp