Unity Term Book
アニメーションと UI

Animation Clip

Animation Clip はアニメーションの基本単位で、位置・回転・色などのプロパティを時間とともに変化させるキーフレーム列です。カーブ、Wrap Mode、Animation Events で再生と演出を細かく制御できます。図解とシミュレーターでクリップ構造を直感的に学べ、制作の基礎を固められます。

想像してみてください...

Animation Clip は伝統的なアニメーターのフィルム一片です。重要なキーフレーム(ジャンプ開始、頂点、着地)を描き、ソフトが中割りを補間します。クリップはそのキーフレーム集合——「0.0 秒で手が A、0.5 秒で B、1.0 秒で再び A」。Unity がクリップを読み、毎フレーム GameObject のプロパティを更新します。

概念の詳細

Animation Clip は (.anim) アセットで、プロパティごとの curve としてアニメーションを保存します——Binding(コンポーネント上のプロパティパス)と AnimationCurve(接線付きキーフレーム)。シリアライズ可能なプロパティなら何でも動かせます: Transform の位置/回転/スケール、Material の色、float、bool、sprite、さらには prefab 参照。

各 Keyframe には値と 2 本の接線(in/out)があり、キー間の Bezier を形作ります。よく使う補間: Smooth(自動接線)、 Linear(フレーム間を直線)、Constant(次キーまで保持——スプライトフリップブック)。クリップには wrapMode があります: Loop、PingPong、ClampForever、Once。

クリップの出所は 2 つ: Unity 内で作成(Animation ウィンドウ、Record モード)か、FBX からインポート(Unity がファイルからクリップを分割)。Humanoid リグではクリップが Muscle system(正規化ボーン)を使い、別スケルトンへリターゲットできます。Generic リグはローカルボーンパスにバインドします。

Animation Events は強力です: クリップ内の時刻にマーカーを置き、Animator が到達するとコンポーネント上の C# メソッドが発火します。足音オーディオ、FX 生成、コンボウィンドウなどに使います。

Animation Clip の構造

Property
0.0s0.25s0.5s0.75s1.0s
Position.x
Position.y
Rotation.z
Scale
🔔 Events

FootStep

FootStep

Playhead:0.00s

ハンズオン手順

1

Animation ウィンドウを開く

Window → Animation → Animation。GameObject を選び → 新規クリップを作成するか、ドロップダウンから既存を選びます。

2

キーフレームを記録

Record(赤い円)を押す → 再生ヘッドを動かす → Scene/Inspector でプロパティを変更 → Unity がキーフレームを書き込みます。

3

接線を調整

Curve ビュー → キーフレームを右クリック → Free/Flat/Linear/Constant 接線でカーブ形状を整えます。

4

Animation Events を追加

Timeline バー → 右クリック → Add Animation Event → メソッド名を入力。メソッドは GameObject 上のコンポーネントに存在する必要があります。

5

Loop と WrapMode を設定

Animation Clip アセットを選択 → Inspector → Loop Time、Loop Pose(開始/終了をブレンド)。ロコモーションでは Loop Pose を有効にして継ぎ目のヒッチを防ぎます。

インタラクティブシミュレーター

異なる補間モードで Animation Clip をプレビュー——イージングを選んで違いを確認しましょう。

CURVE PREVIEW

Time: 0.00sValue: 0.00Easing: Smooth

コード例

基本

AnimationCurve でコードから Animation Clip を構築。

using UnityEngine;

public class ProceduralClip : MonoBehaviour
{
  void Start()
  {
      AnimationClip clip = new AnimationClip();
      clip.legacy = true; // Use with Animation (not Animator)

      // Curve: jump up then land in 1 second
      AnimationCurve curve = new AnimationCurve(
          new Keyframe(0f,   0f),    // t=0: position 0
          new Keyframe(0.5f, 3f),    // t=0.5: peak at 3
          new Keyframe(1f,   0f)     // t=1.0: back to 0
      );

      // Bind the curve to transform "localPosition.y"
      clip.SetCurve("", typeof(Transform),
          "localPosition.y", curve);

      // Play with the legacy Animation component
      Animation anim = gameObject.AddComponent<Animation>();
      anim.AddClip(clip, "jump");
      anim.Play("jump");
  }
}

コード例

上級

コードから Animation Events を処理——足音とコンボウィンドウ。

using UnityEngine;

public class AnimationEventHandler : MonoBehaviour
{
  public AudioClip[] footstepSounds;
  AudioSource audioSrc;

  void Awake() => audioSrc = GetComponent<AudioSource>();

  // Called by an Animation Event when a foot hits the ground
  // (Method name must match the Event in the editor)
  void OnFootstep(AnimationEvent ev)
  {
      // ev.intParameter: 0 = left foot, 1 = right foot
      int foot = ev.intParameter;
      AudioClip sound = footstepSounds[
          Random.Range(0, footstepSounds.Length)];
      audioSrc.PlayOneShot(sound, 0.7f + foot * 0.1f);
  }

  // Callback when the combo window opens (set in the Attack clip)
  void OnComboWindowOpen()
  {
      Debug.Log("Combo window open!");
  }
}

📌 要点

  • ▸クリップ = プロパティパスにバインドされた AnimationCurve
  • ▸Keyframe は値 + in/out 接線でイージングを決める
  • ▸Animation Events: クリップ内の時刻付きコールバック
  • ▸Loop Pose: 開始/終了をブレンドして継ぎ目のないループ
  • ▸Humanoid クリップはリターゲット可、Generic は特定スケルトンにバインド

⚠️ よくあるミス

  • ❌ Animation Event が一度も発火しない

    Event のメソッド名がコンポーネント上のメソッドと一致しない、または受信側 GameObject が違う

    ✅ メソッド名を完全一致(大文字小文字区別)させ、受信 GameObject も合わせる

  • ❌ ループクリップが継ぎ目でヒッチする

    最初と最後のキーフレーム値が一致していない

    ✅ "Loop Pose" を有効にし、ルートモーションを均等に保つ