メニュー

【Unity】便利!アニメーションに関するTIPS8選

eyecatch-unity-animation

本記事ではアニメーションに関する便利なTIPSを紹介いたします。

海外でフリーランスをしているテクニカルアーティスト
ゲーム開発・映像制作・WEB制作等を請け負っています。
当ブログは作業効率化のための技術ブログです。

目次

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

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

準備

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

モデリング

  1. 骨の位置をあたりにして、頭部は8面のSphere、体は8面のCylinder、手足は6面のCylinderのプリミティブを並べます。
  2. オブジェクトをつないで、適当に人型を作成します。
    一番複雑な手の部分は、銃などの武器を持つことを想定して、親指と人差し指、その他の3つに分けます。
  3. ひたすらモデルをいじってそれなりに人型ができて来たら、そのままHumanIKのプロモーションだとつまらないので、バランス見直します。
    (プロモーションの変更に合わせて骨の位置も変更するところでしたが、忘れてました。)
  4. Mesh>Cleanupをかけて、モデルを整理します。最終的に△650ポリゴン以下になりました。
    (久しぶりなので、ここまで1時間強かかってしまいました。)

セットアップ

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

    ※ 本来であれば、Tポーズではなく腕を45度傾けたリラックスポーズにしてモデルを修正したり、丁寧にスキニングしたり、コントローラーをつけたりするべきですが、あくまでコンバートの検証なのでカットします。

コンバート

  1. File>Optimize Scene Sizeをかけます。ごみノードが邪魔をして、モデルの形状が壊れてしまうので余計なノードを消します。
  2. File>Send To Unity>AllでUnityのAssetへ出力します。
    (専用のメニューがあるので安心です。)

Unityでの設定

  1. Projectウインドウで出力したfbxを選択します。
    Rig>Animation TypeをHumanoidに変更して、Configureボタンを押します。
  2. ボーンが正しくセットされているかなどチェックします。
    ちなみにMusclesタブを選択するとポーズをとるようです。(※スキニングはちゃんとしてないモデルです)

補足

HumanIKの調整時、いろいろ問題が起きたのでメモ

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

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

BlendShapeをUnityへコンバートするやり方

はじめに

フェイシャル(表情アニメーション)用の検証
手短に。

Maya

  1. ベースとターゲットのモデル作成
  2. BlendShapeのウインドウを開いて、 ターゲット、最後にベースを選択してEdit>Create BlendShape。

    ※作成後、ベースモデルのヒストリーのBlendShapeがあることを確認。

  3. ベースだけを選択して、File>Send To Unity>SelectでUnityのAssetへ出力します。

    ※ターゲットのモデルは含めなくてもよい。

Unity

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

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

はじめに

Unityちゃんで1つのFBXに複数のアニメーションを管理していたので、同じことを試してみました。

メリットを考えるとしたら

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

Maya

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

Unity

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

備考

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

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

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

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

テラシュールブログさんのスクリプトで1発で解決したのでメモ。

ReplaceMissingAnimationCurve.cs

テラシュールブログ
【Unity】AnimationClipのMissingなパスを見つけて解決しやすくするエディタ拡張 - テラシュールブログ 昨日の応用で、アニメーションするオブジェクトでmissingになっているパスを発見し置換するエディタ拡張を作ってみました。 missingなAnimationClip missingなアニメーショ...

使い方

  • スクリプトを Assets>Editor>ReplaceMissingAnimationCurve.csへ格納
  • Unityを起動して、Assets>ReplaceAnimatorMissingPathを選択してウインドウを起動、Animatorを選択してApplyボタンを押すだけ。

これでリンク切れを恐れずデータ整理できる気がします。

作成したアニメーションが正しく動かない時に確認する場所について

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

FBX Import Setting

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

Mecanim

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

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

AnimationController(.controller)の中にAnimationClip(.anim)のデータを入れるやり方

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

「.anim」のコードを「.controller」のコードの中にコピペすれば、アニメーションデータを格納することができます。

新規で作成するときはテラシュールブログのスクリプトが便利です。

テラシュールブログ
UnityのAnimatorControllerにAnimationClipを内蔵する - テラシュールブログ ことUIにAnimatorを使う場合、ほとんど使いまわす事ができずプレハブもしくはシーンに従う形でAnimationControllerが 作られ、AnimationControllerが参照するAnimationClip...

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

  1. コントローラーの中に入れたいアニメーションデータをコピペします。

    ちなみにコピペで下記のコードは複数できてしまいますが、一つだけも良いようです。
    (※冒頭の行にいれること)

    %YAML 1.1
    %TAG !u! tag:unity3d.com,2011:

  2. Animatorウインドウを開いて、アニメーションデータの再アサインします。

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

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

回転軸の設定

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

回転軸の表示

  1. GameObjectに下記のスクリプトをアタッチ
using UnityEngine;
using System.Collections;
public class Gizmo : MonoBehaviour {
public float gizmoSize = .75f;
public Color gizmoColor = Color.yellow;
void OnDrawGizmos(){
Gizmos.color = gizmoColor;
Gizmos.DrawWireSphere(transform.position, gizmoSize);
}
}

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

回転アニメーションスクリプト

・回転したいオブジェクトに下記のようなコードをアタッチ
・入力したい値は[SerializeField]としておくとInspectorで調整できるので、デザイナーが扱いやすい。
・コードのサイズは191B程度と軽量

using UnityEngine;
using System.Collections;

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

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

全記事一覧

  • URLをコピーしました!

Unityに関する参考記事・ツール・書籍のまとめ

Unityの参考書籍

著:北村 愛実
¥2,673 (2024/10/30 18:00時点 | Amazon調べ)
著:吉谷幹人, 著:布留川英一, 著:一條貴彰, 著:西森丈俊, 著:藤岡裕吾, 著:室星亮太, 著:車谷勇人, 著:湊新平, 著:土屋つかさ, 著:黒河優介, 著:中村優一, 著:牙竜, 著:コポコポ, 著:かせ, 著:hataken, 著:monmoko
¥4,400 (2024/10/31 08:44時点 | Amazon調べ)
著:森哲哉, 著:布留川英一, 著:西森丈俊, 著:車谷勇人, 著:一條貴彰, 著:打田恭平, 著:轟昂, 著:室星亮太, 著:井本大登, 著:細田翔, 著:西岡陽, 著:平井佑樹, 著:コポコポ, 著:すいみん, 著:Maruton, 著:karukaru, 著:ハダシA, 著:notargs, 著:EIKI`, 著:おれんじりりぃ, 著:黒河優介, 著:中村優一, 著:藤岡裕吾
¥8,408 (2024/10/30 18:00時点 | Amazon調べ)
ボーンデジタル
¥5,060 (2024/10/27 01:08時点 | Amazon調べ)

Unityの人気アセット

目次