Blender事始め – No.19(Unityで動かす①)

対象バージョン:Blender v2.82a、Unity v2019.4.1f1

Unityでの動作確認

前回までで作成したQちゃんのデータ(Qchan.fbx)をUnity上で動かしていきます。

今回の記事はblenderではなく「Unity」がメインです。
ただし、Unityの操作についての説明は割愛します。

プロジェクトの新規作成

Qちゃん動作確認用の新規プロジェクト「Qchan_Test」を作成してUnityを起動します。

「Qちゃん」のIMPORT(インポート)

「Qちゃん」をUnityの中で利用できるように、UnityへIMPORT(インポート)します。

Projectビューで[Assets]を選択し、右クリックで表示されるメニューから、[Import New Asset]を選択します。

表示された[Import New Asset]ダイアログで、前回作成した「Qchan.fbx」を指定して、[Import]ボタンをおしてImport(インポート)します。

若干暗いですが、ProjectビューにQchanがインポートされました。

IMPORTしたデータの確認

Qちゃんのデータ[Qchan]をインポートすると、Inspectorビューには、Qchanの詳細データが表示されています。

Importした状態では、[Animation]のデータが表示されています。

[Clips]にはBlenderで作成した各Actionがリストアップされています。

それぞれ、Start(開始フレーム)とEnd(終了フレーム)が表示されています。StartはBlenderでは「1」でしたが、Unityでは「0」になっています。そのためEndもそれぞれBlenderより1ずつ小さい値になっています。

前回、BlenderでImportした際に、Start/Endは設定されませんでした。おそらくUnityはインポートされたデータの最後のKeyframeの設定されているフレームをEnd(最終フレーム)に設定しているものと思われます。

Inspectorビューの下部には、Clipsで選択されているActionについてのプレビューが出来るようです。

各Actionを選択して、再生ボタン(▶)を押して、アニメーションを確認してみます。

データとしては問題なくインポートできている様です。

※色が暗いのは、QちゃんにはMaterialを設定していなかったので、Materialがないための様です。

Scene(シーン)の作成

UnityのGameビューの中で「Qちゃん」が動き回れるように、Sceneの作成をします。

HierarchyビューにPlane(3D Object)とQchan(Assetから)を配置します。

Planeについて、Inspectorビューでサイズを下記の様に変更します。

Qchanについて、カメラ側に向く様にY軸周りに180°回転させ、サイズも小さくなるように、Inspectorビューで調整します。

Gameビューで確認すると下記の様になります。

Qちゃん、Unityの大地に立つ!

Character Controllerでの操作

コンポーネントの追加

ビューの中にQちゃんを配置しただけでは、何も起きません。

今回はQちゃんを動かすために、Character Controllerを利用します。

Inspectorビューの[Add Component]ボタンを押して、[Physics]→[Character Controller]を選択して、Qちゃんに追加します。

Character ControllerをQちゃんのサイズの合わせる様に、下記の様にパラメータを調整します。

※Character Controllerの下端がPlaneより少し浮かしておきます。くっつけてしまうと、動かした際に[Skin Width]分だけQちゃんが浮いてしまうためです。

スクリプトの追加

Character Controllerをキーボードで操作できる様にスクリプトを追加します。

操作方法は以下の様にします。

キー動作
「↑」前進(歩く)
[SHIFT] + 「↑」前進(走る)
「→」右旋回
「←」左旋回

Inspectorビューの[Add Component]ボタンを押して、[New script]を選択しm名前を「CharacterControllerSetup」とし、[Create and Add]ボタンを押して、Qちゃんに追加します。

スクリプトの編集

スクリプトの中身を記述しないと、何も起きないので、CharacterControllerSetup.csの中身を下記の様になる様に編集します。
(スクリプトの中身は、コメントを参照してください)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterControllerSetup : MonoBehaviour
{
    // 歩く(Walk)速度
    public float walkSpeed = 2.0F;
    // 走る(Run)速度
    public float runSpeed = 10.0F;
    // 旋回速度
    public float rotationSpeed = 100.0F;

    // Qちゃん(CharactorControllerコンポーネント)
    CharacterController qChan;
    // Qちゃんの速度
    Vector3 qChanVelocity;

    // Start is called before the first frame update
    void Start()
    {
        // Qちゃん(CharactorControllerコンポーネント)を取得する
        qChan = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        // 方向キー入力値の取得
        float vVal = Input.GetAxis("Vertical"); // 「↑」「↓」キー
        float hVal = Input.GetAxis("Horizontal"); // 「←」「→」キー
        // [SHIFT]キーが押されているかどうか
        bool bShiftDown = Input.GetKey(KeyCode.LeftShift) |
            Input.GetKey(KeyCode.RightShift);

        if (vVal < 0)
        {
            // 「↓」キー入力時は0にする。(後進はしない)
            vVal = 0;
        }
        // 前進速度の設定
        float speed = walkSpeed; // 歩く速度を設定
        if (bShiftDown)
        {
            // [SHIFT]キーが押されていれば、走る速度へ変更
            speed = runSpeed;
        }

        // Qちゃんの速度設定(ローカル座標)
        qChanVelocity = new Vector3(0, 0, vVal * speed);
        // 速度をローカル空間からグローバル空間に変換
        qChanVelocity = transform.TransformDirection(qChanVelocity);

        // 速度に時間(デルタ)を掛け移動量を求め、Qちゃんを移動
        qChan.Move(qChanVelocity * Time.deltaTime);

        // 「←」「→」キーが押されていれば、Qちゃんを旋回させる
        transform.Rotate(0, hVal * rotationSpeed * Time.deltaTime, 0);
    }
}

※編集は、Visual Studio Communityで行い、保存すればUnity側に反映されます。

操作確認

Unity上部中央の再生ボタン(▶)を押して、操作できるかを確認してみます。

キーに応じてQちゃんを操作する事が出来る様になりました。

しかし、同じ姿勢で滑る様に進むだけです…^^;


今回は、Qちゃんのデータ(FBX)に読み込み、Unity上で移動できる所まで確認しました。

移動の速度に応じて、「歩く(Walk)」、「走る(Run)」、「立ち止まる(Idle)」のアニメーションの設定方法については、次回記載します。


前の記事次の記事
No.18(Armature⑤)No.20(Unityで動かす②)