😺

ゲーム開発で必須なUnity×C#×コンポーネント : アニメーション【Animation】を自在に操る

2025/01/18に公開

ゲーム開発で必須なUnity×C#×コンポーネント : アニメーション編

Unityでキャラクターやエフェクトに動きを与えるには、アニメーションが欠かせません。とはいえ、「どうやってC#スクリプトと組み合わせるの?」と疑問に思う方も多いはず。本記事では、アニメーションの概念や重要なコンポーネントを分かりやすく説明しながら、Unity × C# × コンポーネントを活かして滑らかで魅力的な動きを実現するポイントを解説します。

アニメーションが重要な理由

1. キャラクターの没入感を高める

ゲーム制作において、アニメーションがあるかないかでキャラの印象は大きく変わります。プレイヤーの動きや敵の挙動がカクカクしていたら、臨場感が台無し。自然な動きを加えることで、ゲームの完成度が飛躍的にアップします。

2. ユーザーの操作と連動させる

C#スクリプトでプレイヤーの移動や攻撃処理を組むなら、そのタイミングに合わせたアニメーションが必要です。たとえば「攻撃ボタンを押したら攻撃モーション」「ジャンプしたらジャンプモーション」というようにコード側のイベントとアニメーションを連動させると、操作感がぐっと向上します。

3. 効果的な演出を取り入れやすい

アニメーションはキャラだけでなく、UIやエフェクトにも使用できます。たとえば、UIボタンを押したときにふわっと拡大させたり、パーティクルをアニメーションで制御したりすることで、演出面が大幅にレベルアップします。

アニメーションの仕組み:AnimatorとAnimation Clip

1. アニメーションの基本コンポーネント

Animation Clip

  • 3Dモデルのボーンや2Dスプライトのパラメータ変化など、一連の動きを記録したもの。
  • 「歩き」「走り」「攻撃」といった状態ごとにクリップを作るイメージです。

Animator Controller

  • さまざまなAnimation Clipを管理するハブ的存在。
  • クリップ同士の遷移条件(パラメータ)を設定し、スムーズにモーションを切り替える。

Animator(コンポーネント)

  • ゲームオブジェクトにアタッチすることで、Animator Controllerを参照し、ゲーム中にアニメーションを再生。
  • C#スクリプトからパラメータを操作することで、モーションを切り替えられる。

2. ゲームオブジェクトとAnimatorの結びつき

モデルやスプライトを持つGameObjectAnimatorを付ける → Animator Controllerを設定 → そこで定義されたAnimation Clipが再生される。
さらに、C#スクリプトAnimatorのパラメータ(boolやintなど)を変更して、状態遷移をコントロールするのが基本的な流れです。

Unity×C#×アニメーションの連携ポイント

1. AnimatorパラメータをC#で制御

public class PlayerAnimatorController : MonoBehaviour
{
    private Animator animator;
    
    void Start()
    {
        animator = GetComponent<Animator>();
    }
    
    void Update()
    {
        float speed = Input.GetAxis("Vertical");
        animator.SetFloat("MoveSpeed", speed);

        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetTrigger("JumpTrigger");
        }
    }
}
  • animator.SetFloat("MoveSpeed", speed)
    → “MoveSpeed”というfloatパラメータをスクリプトから更新。アニメーションのBlend Treeなどでこれを参照し、動きが変化。
  • animator.SetTrigger("JumpTrigger")
    → “JumpTrigger”というTriggerパラメータをオンにして、一瞬でジャンプモーションに切り替える。

2. Animation Eventで動きの中間に処理を挟む

Animation Clipにイベントポイントを配置し、再生中にC#スクリプトのメソッドを呼び出すことが可能。

  • 例:「攻撃モーションの中盤で当たり判定をONにする」
  • クリップ上でイベントを設定し、「AttackHit」などのメソッド名を紐付ける。

こうすることで**「アニメーションの特定タイミングでゲームロジックを実行」**が容易になります。

3. コンポーネント指向のメリット

  • Animatorがアニメーション再生の要
  • C#スクリプトがプレイヤー操作やロジックを管理
  • それぞれを分けて開発することで、アニメーション部分ゲームロジック部分が独立し、保守性が高い。
  • 別のGameObjectにも同じAnimatorとControllerを使い回すなど、再利用がしやすい

実例:2Dキャラアニメーション

1. スプライトアニメーションを作る流れ

  1. 複数画像を連番で用意(走り1、走り2、走り3…)
  2. Animation Clipを作成し、連番画像をTimelineに並べる
  3. Animator Controllerで遷移を設定
  4. AnimatorをキャラのGameObjectに付け、Controllerを割り当て

2. スクリプトでパラメータ切り替え

public class Player2DAnim : MonoBehaviour
{
    Animator anim;
    
    void Start()
    {
        anim = GetComponent<Animator>();
    }
    
    void Update()
    {
        bool isMoving = Input.GetAxis("Horizontal") != 0;
        anim.SetBool("isMoving", isMoving);
    }
}
  • “isMoving”がtrueなら走りモーション、falseなら待機モーションを再生
  • 2Dゲームでも3Dと同様にAnimatorとC#スクリプトを連携させるだけでOK

3. アニメーションのブレンド

たとえばBlend Treeを使えば、移動速度に応じて走りアニメ→走る速度アップアニメに seamlessly 切り替えることが可能。
2Dでもアニメーションブレンドが強力で、移動量に合わせてスムーズにモーションを変えることができるのが魅力です。

よくあるアニメーションの課題

1. 遷移がガクガク

  • TransitionのDuration(遷移時間)が短すぎて、カクッと変わる
  • Crossfade()メソッドを使って、スクリプト側から滑らかに切り替えるのも手

2. ループ設定のミス

  • 走りモーションが止まってしまう → Animation ClipのLoop Timeチェック
  • アイドルモーションがループしすぎてキャラが変な動き → クリップを分けて制御

3. 同じパラメータ名の衝突

  • Animatorパラメータ名を複数のアニメーターで使い回し、どこで使っているかわからなくなる
  • 命名規則を決め、**“Player_isJumping”**のようにわかりやすく

コードとアニメーションを連動してみよう

1. Attackの判定タイミング

// AnimationClip内にEventを設定し、AttackHit()を呼ぶ
public void AttackHit()
{
    // 攻撃判定をONにする
    collider.enabled = true;
    // しばらくしてOFFにするなど
}
  • アニメーションクリップ上でAnimation Eventを挿入→“AttackHit”メソッドを指定
  • 攻撃のモーション途中で当たり判定が発生し、リアルな演出が可能

2. アイドル→歩き→走りのブレンド

  • animator.SetFloat("MoveSpeed", speed);で移動速度を渡す
  • アニメーションブレンドツリーで、MoveSpeedに応じてアイドル〜歩き〜走りを繋げる

こうすることで操作感が良くなり、ゲーム中の移動が自然に見える。

まとめ:アニメーションが動きを生み、C#がロジックを紡ぐ

  • アニメーションを再生する要はAnimatorAnimation Clip
  • C#スクリプトでアニメーターのパラメータイベントを操作
  • 2Dでも3Dでも構造は似ており、Blend TreeやAnimation Eventで表現力アップ
  • コンポーネント指向なので、各アニメーション機能はGameObjectに貼り付けるだけ

アニメーションを理解すれば、キャラの動きや表情が一気に豊かになります。C#で組む操作ロジックと結びつけると、「ボタンを押したら攻撃アニメ、ヒットしたらリアクション」という流れが完成。これこそがUnity × C# × コンポーネントで作るゲーム開発の醍醐味です。

この記事を読んでもっと実践したいと感じたあなたへ

Unity開発を効率よく進めるためには、実践的なスキルと仲間との交流が欠かせません。
そんな方におすすめのステップが、下記の3つです。

1. 有料教材「どこでもUnity教室」でゲーム制作を短期マスター

  • 5日でシンプルなFPS完成:初心者向けに要点を押さえたカリキュラム
  • C#や最新のInputSystem、FPS実装まで網羅:つまずきやすいポイントを先回りで解説
  • 購入特典:Discord招待+サンプルプロジェクトDLで、疑問や実装例を即確認

たった5日でFPSゲームが作れる自分に変わる教材はこちら

https://zenn.dev/ryuryu_game/books/fd28de9d8e963a

2. 無料コミュニティで、疑問をすぐに解消&モチベーションUP

  • 初心者~中級者までOK:学習進度に合わせて質問や情報共有
  • 質問サポートが充実:わからないことを仲間や講師に即相談
  • 学習仲間と切磋琢磨:一緒に学ぶから続けやすい

Discordサーバー参加はこちら

https://discord.gg/5FwuKCacNy

3. 実績豊富な“ゲーム開発所RYURYU”があなたをトータルサポート

  • コナラ総販売200件超:さまざまなUnity開発の依頼を対応
  • VR/AR/AIなど最新技術にも精通:幅広いノウハウを活かして開発支援
  • ゲームクリエイター甲子園や東京ゲームショウなど出展実績多数

ご相談・お問い合わせはこちら

https://coconala.com/users/1772507

アニメーション編をマスターして、キャラクターや演出をもっと華やかに。「動き」こそがプレイヤーの心をつかむ最大の要素です。ぜひUnityのAnimatorとC#スクリプトを連動させ、リッチな表現を楽しんでください。

Discussion