Unityのアニメーション制作や管理に役立つTIPSをまとめました。
MayaからのFBX・BlendShapeの取り込み、クリップの管理、再生不具合の確認など8項目を紹介します。
画像と外部エディタ拡張には旧バージョンの例を含みます。
現行Maya・Unityでの一連の操作や実機動作は未検証のため、作業用コピーで確認してください。
Maya(HumanIK)で作成したキャラクターをUnityへインポートする方法
MayaのHumanIKでセットアップしたキャラクターをUnityへコンバートする手順です。
準備
- MayaのWorking UnitsとFBXの単位を確認する。meterへの変更は必須ではなく、UnityのConvert Units・Scale Factorと組み合わせて、既知の寸法が意図した大きさになるか確認する
- perspカメラのFocal Lengthは作業しやすい値にする。80は過去の作例での値であり、FBXの尺度やインポートの成立条件ではない
- HumanIKで骨格とCharacter Definitionを作成する。作例ではCreate Skeletonを使うが、生成された骨格に合わせるだけではUnityでの寸法は保証されない
モデリング
- 作例では骨の位置を目安に、頭部は8分割のSphere、胴体は8分割のCylinder、手足は6分割のCylinderなどを配置する。分割数はモデルに応じて選ぶ
- オブジェクト同士を結合して人型を作成する(指は親指、人差し指、残り3本のまとまりなどに簡略化して分ける)
- Mesh → Cleanupを実行して不要なジオメトリを整理する

セットアップ
メッシュと骨(スケルトン)を選択し、Rigging → Skin → Bind Skinのオプションを開きます。
この作例はBind MethodをGeodesic Voxel、Max Influencesを2にした例です。
2は必須値ではありません。
関節を曲げたときの変形と、Unity側のボーンウェイト設定を確認して決めます。
コンバート
- 別名保存してから不要なノードを整理する。Optimize Scene Sizeを使う場合は削除対象を確認し、リグやアニメーションに必要なノードを失わないようにする
- 対象のメッシュ・骨をFBXで書き出してAssetsへ取り込む。旧作例はSend to Unity → Allを使用。現行環境でそのメニューがない場合はFBX Exportを使い、リグの拘束を使う動きは必要な範囲をベイクする
Unityでの設定
- Projectウィンドウで出力されたFBXモデルを選択する
- InspectorのRigタブでAnimation TypeをHumanoidにし、初めてこのモデルのAvatarを作る場合はAvatar DefinitionをCreate From This Modelにする。Apply後にConfigureボタンを押す
- ボーンマッピング、必須ボーン、TポーズとAvatarの有効性を確認する。人型リターゲットが不要なモデルではGenericも検討する

Configureの横に成功を示すチェックが付いても、必須ボーンの対応ができたことを示す段階です。
指などの任意ボーンやTポーズも確認し、実際に関節を曲げて変形を見てください。
作成に失敗した場合はConfigureでボーンの割り当てを確認し、欠けた対応を修正します。
詳細はUnity 6.3 LTSのHumanoidモデルとAvatarの設定を参照してください。
HumanIK調整時の注意点
- 骨を削除・変更する場合:HumanIKのCharacter Definition、リグ、スキンとの参照関係を先に確認します。過去の作例では指の定義解除を伴う調整を行いましたが、すべての再生成問題に共通する解決策ではありません
- バインド後に骨を移動する場合:単なるEdit Pivotを必須操作とせず、MayaのMove Skinned Jointsの案内を確認します。バインドポーズとウェイトを保てるか、コピーで検証してください
- コントロールリグ追加で形状が崩れる場合:定義、ポーズ、拘束、バインド状態を切り分けます。再バインドはウェイトを変えるため、元データを保存し、原因を確認してから行います

BlendShapeをUnityへインポートする方法
表情(フェイシャル)用などに作成したMayaのBlendShapeをUnityへ反映させる手順です。
Maya側の設定
- ベースとなるメッシュと、変形後のターゲットメッシュを作成する
- ターゲットメッシュ、ベースメッシュの順に選択し、使用バージョンのBlend Shape作成コマンドで設定する
- 変形を確認したベースメッシュをFBX出力する。AnimationとDeformed ModelsのBlend Shapesを有効にする。スキン付きなら必要な骨とSkinsも含め、単なるターゲット形状のオブジェクトと変形データを区別する

Unity側の確認
- モデルのImport SettingsでImport BlendShapesを有効にしてApplyし、シーンへ置いたモデルのSkinned Mesh RendererでBlendShapesを確認する
- 通常は0が影響なし、100が完全な影響となる。各シェイプを個別に確認し、他のシェイプやスキニングによる変形と混同しない。公式のBlend Shape手順参照

1つのFBXに複数のアニメーションをまとめて管理する方法
Unity-Chanのモデルデータのように、1つのFBXファイル内に複数のアニメーションクリップを格納して管理する手順です。
メリット
- 1つのファイル上で作業できるため、制作効率が上がりアニメーション間の一貫性も確認しやすい
- FBXファイルが1つにまとまるため、Unityへのインポートやアセット管理の手間を削減できる
- Unityのプロジェクト内でアセットファイルが散乱せず管理しやすい
Maya側の作業
- タイムライン上で複数のアニメーションを続けて作成し、各クリップの開始フレームと終了フレームをメモしておく
- 必要に応じてエクスポート設定でBake Animationにチェックを入れ、FBXとして書き出す
Unity側の設定
- ProjectウィンドウでFBXを選択し、InspectorのAnimationタブでImport Animationを有効にする。Clipsリストの「+」ボタンを押す
- クリップ名を入力し、Start/Endにメモしたフレーム範囲を指定してApplyを押す。取り込み後のプレビューで、開始・終了姿勢と動きを確認する

アニメーションデータを個別の.animファイルとして切り出したい場合
- ProjectウィンドウでFBXを展開し、含まれているAnimationClipを選択してCtrl+Dを押す(アセットの複製)
- 独立した.animファイルとして複製し、名前を付けて参照を割り当てる。元FBXを再インポートしても複製したクリップは自動更新されない点に注意する
アニメーションのMissing(リンク切れ)を一括修復するスクリプト
階層・名前の変更で切れたアニメーションカーブのパスを置換する旧エディタ拡張です。
配布コードは数値カーブを対象とし、Spriteなどのオブジェクト参照カーブは処理しません。
通常のAnimatorControllerを前提にし、未設定やOverride Controllerの扱い、クリップの書き込み可否も事前確認が必要です。
使い方
- 対象クリップとControllerを退避し、参照先記事の配布コードをAssets/Editor/ReplaceMissingAnimationCurve.csに保存する。現行Unityでのコンパイル・動作は作業用コピーで確認する
- UnityメニューのAssets → ReplaceAnimatorMissingPathを選択してウィンドウを開く
- Animatorを指定し、一覧と実際の階層を比較する。old Pathに置換元、replace pathに置換先を入力し、空の置換元や意図しない部分一致がないことを確認してApplyする。変更後に全対象クリップを再生確認する
参考:http://tsubakit1.hateblo.jp/entry/2016/01/26/015331
作成したアニメーションが意図通りに再生されない場合のチェックポイント
Maya等から読み込んだアニメーションでループや補間が正しく動かない場合に確認すべき設定項目です。
FBX Import Settingsの圧縮設定
FBXのAnimationタブで、補間が元データと違う場合はResample Curvesの有無を比較します。
この項目はEulerカーブがある場合に表示されます。
圧縮による差が疑わしい場合だけAnim. Compressionを一時的にOffにして比較し、原因が分かれば誤差許容値を調整します。
Offは容量・実行時メモリや性能への影響があるため、一律の推奨設定ではありません。
ループ問題はStart/End、Loop Time、Loop Poseも確認します。

Animator Controller(遷移設定)
遷移矢印を選び、Has Exit Time、Conditions、Transition Durationを目的に合わせて確認します。
Exit Timeの1は1秒ではなく正規化時間の1周期、Durationの0はブレンドなしです。
最後まで再生して切り替える場合の比較には使えますが、途中で切り替えたい動作や滑らかなブレンドには適しません。
Has Exit TimeとConditionsを併用すると、Exit Timeに達した後にConditionsが評価されます。
複数の条件を指定した場合は、すべてを満たす必要があります。
公式の遷移設定参照。

Transition Durationの単位は、Fixed Durationのチェックで変わります。
有効なら秒、無効なら遷移元ステートの長さに対する割合です。
たとえば遷移元が2秒で速度1の場合、Durationが0.25なら、有効時は0.25秒、無効時は0.5秒相当になります。
同じ数値なのにブレンド時間が違うときは、Fixed Durationと遷移元の長さを先に確認してください。
ここで補足したAvatar、Import Animation、遷移設定は、2026年10月26日にUnity 6.3 LTSの公式資料へ照合しました。
現行Maya・Unityでの操作や、取り込みから再生までの実機確認は行っていません。
Animator Controller内にAnimationClipを直接埋め込む方法
Animator Controller(.controller)アセットの内部にAnimationClip(.anim)をサブアセットとして格納する方法です。
サブアセットとして扱う場合の注意
- 通常のドラッグ&ドロップによるステート作成は、クリップへの参照設定です。サブアセット化とは異なります。埋め込みにはAssetDatabase.AddObjectToAssetなどを使うエディタ処理が必要です
- 埋め込み用ツールを使う場合はControllerを退避し、格納されたクリップをステートへ割り当てる。埋め込みだけでは再生ステートは設定されません
下記は2015年の拡張例です。
新しいクリップをController内に作るコードで、既存クリップをドラッグするだけで取り込む機能ではありません。
配布コードは古いAllocateAnimatorClipを使うため、現行Unityへそのまま導入できるとは限りません。
参考:http://tsubakit1.hateblo.jp/entry/2015/02/03/232316
ドアなどのピボット(回転軸)をUnity上で設定・表示する方法
通常はDCCツール側でピボット(原点)を合わせてからエクスポートしますが、Unityエディタ内だけで手軽に回転軸を合わせる方法です。
回転軸の設定手順
- 回転させたいドアなどのメッシュオブジェクトを配置する
- 空のGameObjectを作成し、TransformのPositionを蝶番の位置へ合わせる。正確な座標はDCC側で確認するか、目印のオブジェクトを用意する
- ドアのワールド位置を保って空オブジェクトの子にし、親を回転させる。親のScaleは原則1,1,1とし、子のローカル座標と回転方向を確認する
回転軸(ギズモ)の表示
Gizmo.csとして保存し、親に付けます。
SceneビューのGizmosを有効にすると位置を示す球が表示されます。
これは回転軸の向きを描いたり、メッシュの原点を変更したりするコードではありません。
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
単純な定常アニメーションをC#スクリプトで実装する方法
一定速度の回転はAnimatorなしでも実装できます。
以下はローカル軸に対する毎秒の回転量を指定する例です。
Animatorとの性能差は対象数や制御内容によるため、実機のProfilerで比較してください。
using UnityEngine;
public class Rotator : MonoBehaviour
{
[SerializeField]
private Vector3 angle;
void Update()
{
transform.Rotate(angle * Time.deltaTime);
}
}実装のポイント:
- Rotator.csとして保存し、回転させるGameObjectに付ける。Angleは初期値が0なので、Yを90にするとローカルY軸まわりに毎秒90度回転する
[SerializeField]を付与した変数はInspectorから直接速度などの調整が可能になるため、現場での微調整が容易になります- Time.deltaTimeを使うためTime.timeScaleの影響を受けます。同じTransformをAnimatorや物理演算でも動かす場合は制御の競合に注意してください
Unityに関する他のTIPS記事は、下記のまとめリンクから確認できます。

文字を手書き風に描画するアニメーションの作成方法はこちらで解説しています。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
アニメーションと演出の記事は、ほかにもあります。



まとめ
- HumanIK連携:FBXの単位、骨格、Avatar、変形を個別に確認する
- BlendShape:フェイシャル表情用モーフをSkinned Mesh Renderer経由で制御する
- 複数クリップ管理:1つのFBX内にClipsを分割定義して管理を一元化する
- リンク切れ修復:エディタ拡張スクリプトを利用してMissingパスを一括置換する
- 再生の不具合対策:FBXのResample CurvesとAnim. Compressionを見直す
- ピボット調整:空の親を蝶番の位置に置き、子の位置を保って親を回転させる
- スクリプト制御:単純な回転をUpdateで実装できる。性能は実測して判断する
