Unity│便利!アニメーションに関するTIPS 8選

Unityのアニメーションに関する便利なTIPSをまとめました。

MayaからのインポートやBlendShape、アニメーション管理など実用的な内容を紹介します。

目次

Maya(HumanIK)で作成したキャラをUnityへインポートする方法

MayaからUnityへキャラクターをコンバートするやり方の紹介です。

準備

  1. Unityとサイズを合わせるためWorking Unitsをmeter(メートル)に設定
  2. パースカメラのゆがみを抑えるため、persp → FocalLengthを80に設定
  3. Rigging → Skeleton → HumanIK → Skeletonを押してHumanIKの骨を表示(これに合わせるとUnityでもちょうどいい大きさでコンバートされる)

モデリング

  1. 骨の位置をあたりにして、頭部は8面のSphere、体は8面のCylinder、手足は6面のCylinderのプリミティブを並べる
  2. オブジェクトをつないで適当に人型を作成(手の部分は親指と人差し指、その他の3つに分ける)
  3. Mesh → Cleanupをかけてモデルを整理
モデリング結果

セットアップ

モデルと骨を選択して、Rigging → Skin → Bind Skinを押します。設定はBind methodをGeodesic Voxel、Max Influencesを2にします。

コンバート

  1. File → Optimize Scene Sizeをかけて余計なノードを消す
  2. File → Send To Unity → AllでUnityのAssetへ出力

Unityでの設定

  1. Projectウィンドウで出力したFBXを選択
  2. Rig → Animation TypeをHumanoidに変更してConfigureボタンを押す
  3. ボーンが正しくセットされているかチェック
UnityでのHumanoid設定

HumanIK調整時の注意点

  • シーンを開くと消したはずの骨が再生される → 指の骨のチェック(定義)を外さないと消えない
  • シーンを開くとモデルの形状が壊れる → 骨を修正するときにPivotで移動しないと骨が元の位置に戻ろうとしてメッシュの形も崩れる
  • コントローラーを追加すると形状が壊れる → 一からやり直した方が早い
HumanIKの問題例

BlendShapeをUnityへインポートする方法

フェイシャル(表情アニメーション)用のBlendShapeをUnityへコンバートする方法です。

Maya側の設定

  1. ベースとターゲットのモデルを作成
  2. BlendShapeのウィンドウを開いて、ターゲット、最後にベースを選択してEdit → Create BlendShape
  3. ベースだけを選択して、File → Send To Unity → SelectでUnityのAssetへ出力(ターゲットのモデルは含めなくてもよい)
MayaでのBlendShape設定

Unity側の確認

  1. ベースオブジェクトを選択して、Skinned Mesh Renderer → BlendShapeのターゲットを確認
  2. 数値を100にするとターゲットの形状が完全に反映される
UnityでのBlendShape確認

1つのFBXに複数のアニメーションを管理する方法

Unityちゃんのように1つのFBXに複数のアニメーションを管理する方法です。

メリット

  • 1データで作業したほうが、作業効率やアニメーションの一貫性の確認がしやすい
  • 1データなのでUnityへのコンバートコストが良い
  • Unityでデータ管理しやすい

Maya側

  1. 複数のアニメーションを付ける。それぞれの開始と終わりのフレームをメモ
  2. 必要であればBake Animationにチェックを入れてFBXをExport

Unity側

  1. FBXを選択し、Clipsの+ボタンを押す
  2. フレーム数と命名を入力
Clipsの設定

アニメーションデータを個別に出力したい場合

  1. FBX内のアニメーションを選択してCtrl+D(複製)
  2. Animデータがコピーされるので別名に命名を変更する

アニメーションのリンク切れを1発で直すスクリプト

Prefab内のデータを整理していて、アニメーションデータが黄色文字(missing)になった時に使えます。

使い方

  1. スクリプトをAssets/Editor/ReplaceMissingAnimationCurve.csへ格納
  2. Unityを起動してAssets → ReplaceAnimatorMissingPathを選択
  3. ウィンドウでAnimatorを選択してApplyボタンを押す

参考:http://tsubakit1.hateblo.jp/entry/2016/01/26/015331

作成したアニメーションが正しく動かない時の確認箇所

Maya等で作成したアニメーションがUnityで正しく動かない(ループなど)時に確認する場所です。

FBX Import Setting

FBXを選択して、AnimationタブのResample CurvesAnim.CompressionOFFにします。

FBX Import Setting

Mecanim

Mecanimの矢印つなぎ部分を選択して、Exit Time1Transition Duration(s)0にします。

Mecanimの設定

コントローラーの中にアニメーションデータを入れる方法

AnimationController(.controller)の中にAnimationClip(.anim)のデータを入れる方法です。

すでにあるアニメーションデータを入れる場合

  1. コントローラーの中に入れたいアニメーションデータをコピペする
  2. Animatorウィンドウを開いてアニメーションデータを再アサインする

新規で作成する場合は下記が便利です。

参考:http://tsubakit1.hateblo.jp/entry/2015/02/03/232316

ドアのPivot(回転軸)の設定と表示方法

3DソフトでオブジェクトのPivot(回転軸)を設定してからインポートすればよいですが、Unityだけでさくっと作りたい時の方法です。

回転軸の設定

  1. 回転させたい平面を作成
  2. 空のGameObjectを作成し、Vキーを押しながら回転させたい場所へスナップ
  3. 平面をGameObjectの子にする

回転軸の表示

GameObjectに下記のスクリプトをアタッチします。

using UnityEngine;

public class Gizmo : MonoBehaviour
{
    public float gizmoSize = 0.75f;
    public Color gizmoColor = Color.yellow;

    void OnDrawGizmos()
    {
        Gizmos.color = gizmoColor;
        Gizmos.DrawWireSphere(transform.position, gizmoSize);
    }
}

参考:https://www.youtube.com/watch?v=itIh8PYGP7w

単純なアニメーションをスクリプト化する方法

回転などの単純なアニメーションはスクリプトで実装すると軽量です。

using UnityEngine;

public class Rotator : MonoBehaviour
{
    [SerializeField]
    private Vector3 angle;

    void Update()
    {
        transform.Rotate(angle * Time.deltaTime);
    }
}

ポイント:

  • 回転したいオブジェクトにスクリプトをアタッチ
  • [SerializeField]を使うとInspectorで値を調整できるのでデザイナーが扱いやすい
  • コードサイズは191B程度と軽量

まとめ

  • HumanIK:MayaからUnityへキャラクターをコンバート
  • BlendShape:フェイシャルアニメーション用に使用
  • 複数アニメーション管理:1つのFBXでClipsを分割
  • リンク切れ修正:エディタスクリプトで一発解決
  • アニメーション問題:Resample CurvesとAnim.CompressionをOFFに
  • Pivot設定:空のGameObjectを親にしてスナップ
  • スクリプト化:単純なアニメーションは軽量なスクリプトで実装
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次