mcpField
U
unity-animation

unity-animation

github.com/gamedev-skills開発5.4k6.4k 回インストール1 日前に更新
リポジトリ

unity-animation について

unity-animationは、Unity 6.3 LTSのAnimatorとAnimator Controllerでキャラクターアニメーションを制御するスキルです。スクリプト駆動のワークフローで、状態遷移、ブレンド、レイヤー、人型IKを扱います。

主な機能

  1. 01Animatorの状態と遷移
  2. 02スクリプトによるアニメーションパラメーター制御
  3. 03移動用のBlend Tree
  4. 04アニメーションレイヤーとAvatar Mask
  5. 05人型キャラクターの逆運動学

活用シーン

  1. 01キャラクターのアニメーションステートマシン構築
  2. 02待機・歩行・走行モーションのブレンド
  3. 03移動に上半身アクションを重ねる
  4. 04人型キャラクターの手足IK追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill unity-animation

インストール後、Claude Code で/unity-animationを入力して読み込まれたか確認します。

同梱ファイルreferences/blend-trees-and-ik.md

詳細

Unity Animation (Animator / Mecanim)

Unity 6.3 LTS の Animator と Animator Controller を使って、アニメーションの状態を制御します。パラメーター、遷移、ブレンドツリー、レイヤー、ヒューマノイド IK に対応しています。対象は Unity 6.3 LTS (6000.3) です。

使用する場面

  • アニメーションクリップをステートマシンに接続する場合、パラメーターを使ってスクリプトから制御する場合、移動アニメーション(アイドル→歩行→走行)をブレンドする場合、移動に上半身の動作を重ねる場合、またはヒューマノイドリグに足や手の IK を追加する場合に使用します。
  • プロジェクトに *.controller(Animator Controller)や *.anim アセットがある場合、またはリグ付きモデルに Avatar がある場合に使用します。

使用しない場面: UI のフェードや位置の補間など、スケルトンを使わない単純な値のトゥイーンには、トゥイーンやコルーチンの使用が適しています。unity-csharp-scripting を参照してください。Timeline のカットシーンは別のツールを使用します。2D スプライトのフレームアニメーションも Animator を使いますが、スプライトのキーフレームを使用します。

基本的なワークフロー

  1. モデルに Animator を追加して Animator Controller を割り当てます。ヒューマノイドモデルの場合は、リグを Humanoid に設定して Avatar を用意します(リターゲティングと IK が有効になります)。
  2. コントローラーにパラメーターを定義します。Float(Speed)、Bool(IsGrounded)、Int、Trigger(Jump)などを設定し、それらのパラメーターを読み取る 条件 を持つ遷移をステートに設定します。
  3. ステートを直接操作せず、スクリプトからパラメーターを設定します。SetFloat、SetBool、SetInteger、SetTrigger を使用します。ステートマシンが遷移を処理します。
  4. 連続した動きのブレンドには、複数の個別ステートと遷移を使う代わりに、Blend Tree を使用します(Speed などの 1 つの Float でアイドル↔歩行↔走行を制御します)。
  5. 加算または上書きする動作をレイヤー化します(例:Avatar Mask を使った上半身の「照準」レイヤー)。その layerWeight を制御します。
  6. Play モード中に Animator ウィンドウで確認します。現在のステートがハイライトされ、パラメーターの値が更新されるため、どの遷移が実行されたか(またはされなかったか)を正確に確認できます。

パターン

1. スクリプトから移動アニメーションと一度限りの動作を制御する
using UnityEngine;

[RequireComponent(typeof(Animator))]
public class CharacterAnim : MonoBehaviour
{
    private Animator _anim;
    // Cache parameter hashes — faster and typo-proof vs string lookups every frame.
    private static readonly int Speed     = Animator.StringToHash("Speed");
    private static readonly int IsGrounded= Animator.StringToHash("IsGrounded");
    private static readonly int Jump      = Animator.StringToHash("Jump");

    private void Awake() => _anim = GetComponent<Animator>();

    public void Tick(float planarSpeed, bool grounded)
    {
        _anim.SetFloat(Speed, planarSpeed);     // drives a 1D blend tree (idle/walk/run)
        _anim.SetBool(IsGrounded, grounded);    // gates a falling/landing transition
    }

    public void DoJump() => _anim.SetTrigger(Jump);  // fire-and-forget; auto-resets after use
}
2. ノイズの多い入力をブレンドパラメーターに滑らかに反映する
// dampTime smooths Speed so the blend tree doesn't snap; great for analog sticks.
_anim.SetFloat(Speed, targetSpeed, 0.1f /* dampTime */, Time.deltaTime);
3. ステートを直接再生/クロスフェードする(パラメーター条件を回避)
// Useful for hit reactions where you want an immediate, explicit transition.
_anim.CrossFade("Hit", 0.1f);                    // blend over 0.1s normalized
// Or jump instantly:  _anim.Play("Hit");
4. 現在のステートが終了するまで待つ
private System.Collections.IEnumerator AfterAttack()
{
    var info = _anim.GetCurrentAnimatorStateInfo(0);   // layer 0
    yield return new WaitForSeconds(info.length);      // approximate clip length
    // ...follow-up logic
}

注意点

  • SetTrigger が認識されない、または「残り続ける」 — トリガーは次に条件を満たした遷移で消費され、自動的にリセットされます。トリガーを消費する遷移がない場合、予期しないタイミングで実行されることがあります。ResetTrigger でクリアするか、条件が継続的な状態を表す場合は Bool を使用してください。
  • 文字列パラメーターの誤記は通知されない — 名前を間違えても何も起こらないだけです。Animator.StringToHash を使い、整数ハッシュをキャッシュしてください。
  • 遷移が遅く感じる — Has Exit Time が有効だと、クリップが正規化時間に達するまで遷移が待機します。ジャンプや被弾など、条件に応じたすばやい遷移を行うには無効にします。
  • キャラクターが滑る、または動かない — Apply Root Motion が有効なのにコードでも Transform を動かしている、またはその逆の状態です。ルートモーションかスクリプトによる移動のどちらかを選び、併用しないでください。
  • 上半身レイヤーが全身を上書きする — レイヤーの Blend モード(Override または Additive)を設定し、Avatar Mask を割り当てて、layerWeight(0~1)を調整してください。
  • IK が動作しない — IK は OnAnimatorIK 内でのみ適用されます。レイヤーで「IK Pass」を有効にし、Humanoid Avatar を用意する必要があります。

参考資料

  • ブレンドツリー(1D と 2D Freeform/Directional)、アニメーションレイヤーと Avatar Mask、ヒューマノイド IK(OnAnimatorIK、SetIKPositionWeight、SetIKPosition、Look At)については、references/blend-trees-and-ik.md を参照してください。
  • 主なドキュメント:Unity Manual の「Animation」セクション、および ScriptReference/Animator。

関連スキル

  • unity-csharp-scripting — 上記で使用した MonoBehaviour とコルーチンのタイミング制御。
  • unity-physics — アニメーションで表現する物体の移動。
  • game-ai — どのアニメーションステートをいつ再生するかの判断。

コメント