Mixamoでアニメーションを設定して、Unity で制御するまでやってみます
Mixamo にアップロード
https://www.mixamo.com
※Adobe CC のアカウントが必要です
まずは何かしらの人型モデルデータを用意。サイト上でリグを設定することもできます(モデルによってはうまくいかない場合もある)。
データ形式は、FBX、OBJ、ZIP に対応しています。ちなみに zip というのはテクスチャとマテリアル、obj を固めたもの。
マーカーを設定する
右側のサンプル通りにマーカーを配置します。リギング済みのデータならこのステップは飛ばされます。
アニメーションを設定する
サイト内にアニメーションはいろいろありますが、今回は待機と歩行、ジャンプを設定。それぞれダウンロードします。
座標が変わると困る場合は"In Place"にチェックを入れる
Mixamo 上では複数のアニメーションをまとめることはできませんが、"Pack"で検索するとひとつのタイムラインにまとまったやつがいくつか見つかります。
ダウンロードする
Unityにインポート
ダウンロードした FBX をUnityにインポート。Prefabになっているモデルの一体をヒエラルキーに配置して、新規の AnimationController をアタッチ。
Humanoid にする
単に動かすだけなら不要ですが、これをやっておくと、Humanoid形式の他モデルとAnimationControllerを共有できるようになるので便利。
それと待機や歩行などはループにしておきます。AnimationController上のアニメーションクリップのインスペクタ→"Loop Time"にチェックいれるとループになります。
アニメーションパラメーターをつくる
今回は 待機<->歩行<->ジャンプ という感じの制御なので以下のパラメーターを用意。
- Trigger 型で、名前を Jump
- Bool 型で、名前を IsWalk
トランジションと条件を設定する
Prefab下にアニメーションクリップを AnimationController に配置して、それぞれをトランジションで結び、インスペクタを設定します。
待機(Idle)→歩行(Walking)
歩行(Walking)→待機(Idle)
待機(Idle)→ジャンプ(Jumping)
ジャンプ(Jumping)→待機(Idle)
歩行(Walking)→ジャンプ(Jumping)
ジャンプ(Jumping)→歩行(Walking)
アニメーションに間がついてたりして違和感あったら、クリップのIn点とOut点を調整したり、アニメーションブレンドしたりすると良い感じになります。
制御スクリプトをつける
ごく簡単な制御をしてみます。以下のスクリプトをヒエラルキー上のモデルにアタッチすると、上アローキー押下で待機から歩行、キーを離すと歩行から待機、スペースキーでジャンプします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Anim : MonoBehaviour
{
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
anim.SetBool("IsWalk", true);
}
else
{
anim.SetBool("IsWalk", false);
}
if (Input.GetKeyDown(KeyCode.Space))
{
anim.SetTrigger("Jump");
}
}
}