---
title: "Unity AnimatorのUpdate Mode｜Normal・Fixed・UnscaledTimeの違いとAnimate Physics【Unity 6対応】"
url: "https://www.issoh.co.jp/tech/details/3622/"
published: 2024-09-20
updated: 2026-10-28
categories: ["シミュレーション"]
publisher: "株式会社一創"
---

# Unity AnimatorのUpdate Mode｜Normal・Fixed・UnscaledTimeの違いとAnimate Physics【Unity 6対応】

Unityの**Animator**は、毎フレームのUpdate（更新）でステートマシンを進めて姿勢を計算します。その更新を「どのループで・どの時間軸で」走らせるかを決めるのが**Update Mode**です。ポーズ中もアニメが動き続ける場合や、Rigidbodyのキャラで更新タイミングがずれる場合は、まずこの設定を確認します。

注意したいのは、Unity 2023.1で仕組みが変わった点です。以前の `AnimatePhysics` は、**更新タイミングの「Fixed」**と、Inspectorの**「Animate Physics」チェックボックス**の2つに分かれました。本記事では3モードの違いと使い分け、この分離の意味、`Animator.Update()` による手動更新までを、Unity 6（6000.x）のソースと公式リファレンスに沿って整理します。

## まとめ：Update Modeの選び方

- **Normal**：Updateループで更新し、`Time.timeScale` に連動。通常のキャラクターや演出はこれ。
- **Fixed**：FixedUpdateループで更新。Rigidbodyと動きを揃えたいキャラに使う（Unity 2022以前の名称は `AnimatePhysics`）。
- **UnscaledTime**：`Time.timeScale` を無視して実時間で更新。ポーズメニューやローディング演出向け。
- Unity 2023.1以降、アニメーションで動かすキネマティックRigidbodyで他の物体を押す・乗せるには、Fixedとは別に**Animate Physics**（`Animator.animatePhysics`）をオンにする。
- 自分のタイミングで進めたいときは `Animator.Update(deltaTime)`。ただし並列評価されず、物理とも噛み合わないことがある。

## Animatorの更新（Update）とUpdate Modeの関係

Animatorの「Update」は、ステートマシンとBlend Treeを1フレーム分進め、計算した姿勢をTransformなどへ書き込む処理です。公式リファレンスの[Animatorクラス](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/animator)は、既定では `Time.deltaTime` に従って毎フレーム評価すると説明し、その挙動を変える手段として `Animator.updateMode`・`Animator.cullingMode`・`Animator.Update` の3つを挙げています。

このうち `updateMode`（型は `AnimatorUpdateMode`）が、Inspectorの「Update Mode」ドロップダウンと同じ設定です。

```
using UnityEngine;

public class AnimatorUpdateExample : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();

        // 現在のUpdate Modeを確認する
        Debug.Log(animator.updateMode);
    }
}
```

## Update Modeの3種類と違い（Normal・Fixed・UnscaledTime）

enumの値は `Normal = 0`、`Fixed = 1`、`UnscaledTime = 2` の3つです。[AnimatorUpdateModeのリファレンス](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/animatorupdatemode)の説明を、更新ループと時間軸で並べると次のとおりです。

| Update Mode            | 更新ループ       | Time.timeScale | 向く用途            |
| ---------------------- | ----------- | -------------- | --------------- |
| Normal                 | Update      | 連動する           | 通常のキャラ・演出       |
| Fixed（旧AnimatePhysics） | FixedUpdate | 連動する           | Rigidbody連動のキャラ |
| UnscaledTime           | Update      | 無視する           | ポーズUI・ローディング    |

### Normal：Updateループで更新しTime.timeScaleに連動

Animatorクラスの説明にある「既定では `Time.deltaTime` に従って毎フレーム評価する」動作がこのモードです。Updateフェーズで更新し、`Time.timeScale` を下げればアニメも遅くなり、0にすれば止まります。リファレンスは「物理と独立して動くアニメーション向け」としています。キャラクターの移動・攻撃モーションなど、ゲーム進行と同じ時間で動かすものはNormalのままで構いません。

### Fixed：FixedUpdateループでの更新と物理との同期

物理エンジンと同じ固定タイムステップ（`Time.fixedDeltaTime`）で評価します。[fixedDeltaTimeのリファレンス](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/time/fixeddeltatime)のとおりこの間隔はゲーム内時間なので、`Time.timeScale` を0.5にすると実時間では2倍の間隔になり、Fixedのアニメも同じだけ遅くなります。Rigidbodyで動くキャラクターの姿勢と当たり判定がずれにくくなる一方、描画フレームより更新が粗くなることがあります。物理と関係のないUIや装飾にFixedを使うと見た目だけがカクつくので、避けてください。

### UnscaledTime：Time.timeScaleを無視して実時間で更新

Updateループで更新しますが、時間のスケーリングを受けません。`Time.timeScale = 0` でゲームを止めても動き続けるため、リファレンスも「ゲームを一時停止しても動かしておきたいUIやエフェクト向け」と書いています。

## Animatorコンポーネントの設定項目（Inspector）

Animatorを使うには、GameObjectにAnimatorコンポーネントを追加し、どのクリップをどう遷移させるかを定義したAnimator Controllerを割り当てます。Unity 6のInspectorに並ぶ項目は、[AnimatorInspector.cs（UnityCsReference 6000.0）](https://github.com/Unity-Technologies/UnityCsReference/blob/6000.0/Editor/Mono/Inspector/AnimatorInspector.cs)で確認すると次の順です。

| 項目                | スクリプトのプロパティ               | 役割                    |
| ----------------- | ------------------------- | --------------------- |
| Controller        | runtimeAnimatorController | 使うAnimator Controller |
| Avatar            | avatar                    | Humanoidのリターゲット用      |
| Apply Root Motion | applyRootMotion           | 移動をアニメ側で制御するか         |
| Animate Physics   | animatePhysics            | アニメの移動を物理へ通知          |
| Update Mode       | updateMode                | 更新ループと時間軸             |
| Culling Mode      | cullingMode               | 画面外での更新範囲             |

Animate Physicsの行はUnity 2023.1で増えた項目で、2022.3のInspectorにはありません。一方で[Animatorコンポーネントのマニュアル](https://docs.unity.com/en-us/engine/6000.5/manual/animation-section/animation-mecanim/class-animator)は、6000.7や7000.0の版でもUpdate Modeの選択肢を「Normal／Animate Physics／Unscaled Time」と旧名で載せ、Animate Physicsのチェックボックスに触れていません。このUpdate Modeの表記差は、使用中のUnityバージョンに対応するスクリプトリファレンスとInspector実装を照合して判断してください。

## FixedとAnimate Physicsチェックボックスの関係（Unity 2023.1以降）

### Unity 2022.3までのAnimatePhysics：更新タイミングと物理連携の一体化

Unity 2022.3までの `AnimatorUpdateMode` は `Normal`・`AnimatePhysics`・`UnscaledTime` でした。同じ版の `Animator.animatePhysics` は非推奨のboolで、[ソース](https://github.com/Unity-Technologies/UnityCsReference/blob/2022.3/Modules/Animation/ScriptBindings/Animator.bindings.cs)上は `updateMode == AnimatorUpdateMode.AnimatePhysics` を返すだけの別名です。つまりUpdate ModeをAnimate Physicsにすれば、FixedUpdateで評価することと物理へ動きを伝えることが一度に有効になりました。

### Unity 2023.1以降のFixed：更新タイミングだけを担い、物理への通知は別スイッチ

2023.1で enum値は `Fixed` に置き換わり、`AnimatePhysics` には次のObsolete属性が付きました。UnityCsReferenceの[2023.1ブランチ](https://github.com/Unity-Technologies/UnityCsReference/blob/2023.1/Modules/Animation/ScriptBindings/Animator.bindings.cs)から[7000.0ブランチ](https://github.com/Unity-Technologies/UnityCsReference/blob/7000.0/Modules/Animation/ScriptBindings/Animator.bindings.cs)まで、2023.2・6000.0・6000.3・6000.5・6000.7の各ブランチでも同じ文言です（2026年10月28日確認）。

```
[Obsolete("Enum member AnimatorUpdateMode.AnimatePhysics has been deprecated. Use AnimatorUpdateMode.Fixed to evaluate in FixedUpdate time and Animator.animatePhysics to sync transforms for physics. (UnityUpgradable) -> Fixed", true)]
AnimatePhysics = 1
```

「FixedUpdateで評価するならFixed、Transformを物理に同期するならanimatePhysics」という指示で、役割が2つに分かれたことを示しています。`animatePhysics` は独立したプロパティになり、[リファレンス](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/animator/animatephysics)では「有効にすると、キネマティックRigidbodyを持つGameObjectのアニメーション後のTransformを物理システムが使い、他のGameObjectに影響させる」と説明されています。例として挙がっているのが、アニメーションで動く床に乗った物体へ速度と摩擦を伝えるケースで、床側のRigidbodyは Is Kinematic をオンにしておく必要があります。

```
using UnityEngine;

// アニメーションで往復する床。上に乗ったRigidbodyを一緒に運ぶ
[RequireComponent(typeof(Animator), typeof(Rigidbody))]
public class MovingPlatform : MonoBehaviour
{
    void Awake()
    {
        var body = GetComponent<Rigidbody>();
        body.isKinematic = true;                          // 床はキネマティック

        var animator = GetComponent<Animator>();
        animator.updateMode = AnimatorUpdateMode.Fixed;   // 物理と同じFixedUpdateで評価
        animator.animatePhysics = true;                   // 動きを物理システムへ通知
    }
}
```

上のMovingPlatformは更新設定だけの例です。床にはColliderと、床を移動させるAnimation Clipを含むAnimator Controllerが別途必要です。判断の目安は次の2つです。Rigidbodyで動くキャラのアニメーション評価をFixedUpdateに揃える目的ならFixedを選びます。アニメーションで動かすコライダーで他の物体を押す・運ぶなら、Fixedに加えてAnimate Physicsもオンにします。

### 同じコードで意味が変わる animatePhysics の罠

`animator.animatePhysics = true;` という1行は、2022.3では「Update ModeをAnimatePhysicsにする」意味でしたが、2023.1以降は「物理への通知をオンにする」だけでUpdate Modeは変わりません。2022時代のコードをUnity 6へ持ち込んだら、Update Modeが意図どおりFixedになっているかを確かめてください。

また `AnimatePhysics` のObsolete属性は第2引数が `true` のため、2023.1以降に書くとコンパイルエラーになります。`(UnityUpgradable) -> Fixed` の指定によりAPI Updaterが `Fixed` へ書き換えますが、上で見たとおり、書き換え後は物理への通知が含まれない点に注意が必要です。複数バージョンで共有するコードなら、シンボルで分けます。

```
#if UNITY_2023_1_OR_NEWER
    animator.updateMode = AnimatorUpdateMode.Fixed;
    animator.animatePhysics = true;   // 物理へ動きを伝える場合のみ
#else
    animator.updateMode = AnimatorUpdateMode.AnimatePhysics;
#endif
```

Unity 6系のどの版を使うかは、[Unity 6.3 LTS（6000.3）の新機能と変更点｜最新パッチ・サポート期限・6.0からの移行](/tech/details/10417/)でサポート期限とあわせて確認できます。

## ポーズ中のUI：スクリプトによるUpdate Modeの切り替え

Update Modeは実行中にも変えられます。ここでは、ポーズ中だけUIのAnimatorをUnscaledTimeにする例を示します。menuAnimatorにはInspectorで対象を割り当ててください。この例は通常時のtimeScaleを1としており、スローモーション中の値を復元する場合はポーズ前の値を保存する必要があります。公式リファレンスのサンプルも、ポーズ時にUnscaledTimeへ切り替え、再開時にNormalへ戻す構成になっています。

```
using UnityEngine;

public class PauseMenu : MonoBehaviour
{
    [SerializeField] private Animator menuAnimator;  // ポーズメニューのAnimator

    public void SetPaused(bool paused)
    {
        // ゲーム全体はtimeScaleで止め、メニューだけ実時間で動かす
        Time.timeScale = paused ? 0f : 1f;
        menuAnimator.updateMode = paused
            ? AnimatorUpdateMode.UnscaledTime
            : AnimatorUpdateMode.Normal;
    }
}
```

ポーズメニューのように常に実時間で動けばよいAnimatorは、切り替えずにInspectorで最初からUnscaled Timeにしておく方が単純です。切り替えが要るのは、平常時はスローモーションに追従させたいが、ポーズ中だけは動かしたいAnimatorです。

## Animator.Update()による手動更新と実行上の制約

[Animator.Update(float deltaTime)](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/animator/update) は、渡した時間だけAnimatorを即座に評価するメソッドです。Animatorクラスの説明では、この呼び出しはUpdate Modeとは無関係に動きます。リプレイやネットワーク同期のように再生時刻を自前で管理したい場合は、Animatorを無効にしてエンジンの自動更新を止め、自分で進めます。

```
using UnityEngine;

public class ManualAnimatorTick : MonoBehaviour
{
    [SerializeField] private Animator animator;
    [SerializeField] private float tickRate = 30f;  // 1秒あたりの評価回数
    private float accumulated;

    void Start()
    {
        if (tickRate <= 0f)
        {
            Debug.LogError("tickRateは0より大きい値にしてください");
            enabled = false;  // 不正な値ではこのスクリプトを止める
            return;
        }
        animator.enabled = false;  // 自動更新を止める
    }

    void Update()
    {
        accumulated += Time.deltaTime;
        float step = 1f / tickRate;
        while (accumulated >= step)
        {
            animator.Update(step);  // 固定刻みで手動評価
            accumulated -= step;
        }
    }
}
```

使う前に知っておきたい制約が2つあります。

- **並列評価されない**：Animatorクラスの説明によると、Mecanimは通常Animatorを複数のCPUコアに分けて評価しますが、`Animator.Update` で手動評価したものは並列実行の対象外です。数十体を手動で回すなら、複数のAnimatorをPlayableGraphにまとめてグラフ側を手動更新する方法が勧められています。
- **物理とずれることがある**：Update(float)のリファレンスは、このメソッドでの更新は物理エンジンやゲームループで評価される他のシステムとうまく噛み合わない場合があると注意しています。物理と揃えたいだけなら手動更新ではなくFixedを選びます。

Photon Fusionのようにティック単位で状態を進めるネットワークエンジンでは、アニメーションの進め方も同期方式に合わせる必要があります。モードごとの違いは[Photon Fusionとは？Fusion 2.1の3モードの違い・料金試算・PUN2からの移行【2026年10月】](/tech/details/6888/)で整理しています。

## よくあるトラブルの切り分け

### ポーズ（Time.timeScale = 0）中のアニメーション停止と対処

NormalとFixedは時間のスケーリングを受けるため、`timeScale = 0` で止まるのは仕様どおりです。止めたくないAnimatorだけをUnscaledTimeにします。ゲーム全体をUnscaledTimeにするとスロー演出にも追従しなくなるので、対象はUIや演出用のAnimatorに絞ります。

### Rigidbodyキャラのカクつきと移動床の追従不良への対処

キャラの見た目と当たり判定がずれてカクつくなら、Update ModeをFixedにしてFixedUpdateで評価させます。アニメーションで動く床やエレベーターの上の物体が滑り落ちる、押されないといった症状は、Fixedだけでは直りません。Unity 2023.1以降なら床のAnimatorでAnimate Physicsをオンにし、床のRigidbodyをキネマティックにしてください。

### 画面外のアニメーション停止とCulling Modeの確認

これはUpdate ModeではなくCulling Modeの影響です。[AnimatorCullingMode](https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/animatorcullingmode)は、Always Animate（画面外でも常に更新）、Cull Update Transforms（描画されていない間はリターゲット・IK・Transformの書き込みを止める）、Cull Completely（完全に止める）の3つです。画面外でもイベントや位置を進めたいキャラはAlways Animateにします。大量のキャラを置く場面では、画面外で状態更新を止めても支障のないキャラにCull Completelyを設定すると、Rendererが非表示の間のアニメーション更新を省けます。

Unity-chanのようなHumanoidモデルで挙動を試す場合は、素材のライセンスを[ユニティちゃん(Unity-chan)とは？ダウンロード・ピンク色の直し方・ライセンスをUnity 6対応で解説](/tech/details/4906/)で確認してから使うと安心です。Unity 6でエディタの表示言語を切り替えたいときは[Unityを日本語化する方法（Unity 6対応）とUnity 6の新機能・変更点](/tech/details/4881/)が参考になります。アニメーションを多用するゲームやシミュレーションを社外に依頼したい場合は、issohの[ゲームアプリ開発](/service/apps/game/)でも相談を受け付けています。

## よくある質問

### unity animator updateとは何を指しますか？

AnimatorがステートマシンとBlend Treeを進めて姿勢を更新する処理のことです。実務では、そのタイミングを決める `Animator.updateMode`（Update Mode）と、スクリプトから手動で評価する `Animator.Update()` のどちらかを指すことがほとんどです。

### AnimatePhysicsとFixedは同じものですか？

更新タイミングは同じFixedUpdateですが、完全に同じではありません。Unity 2023.1以降、物理システムへアニメーションの動きを伝える役割は `Animator.animatePhysics`（InspectorのAnimate Physics）に分かれました。旧AnimatePhysicsで動く床に物体を乗せていた場合は、FixedとAnimate Physicsの両方を設定します。

### Update ModeをNormalにするとTime.timeScaleの影響を受けますか？

受けます。timeScaleを下げればアニメもスローになり、0で停止します。影響を受けたくないAnimatorはUnscaledTimeにします。

### ポーズ中もアニメーションを動かすにはどうしますか？

そのAnimatorの `updateMode` を `AnimatorUpdateMode.UnscaledTime` にします。`Time.timeScale = 0` でも実時間で更新されます。

### Animator.Update()はいつ使いますか？

リプレイやネットワーク同期など、再生時刻を自分で管理したいときです。`animator.enabled = false` で自動更新を止めてから呼びます。手動評価は並列実行されないため、多数のAnimatorを手動で回すならPlayableGraphにまとめる方法を検討します。

## 関連記事

- [Unity 6.3 LTS（6000.3）の新機能と変更点｜最新パッチ・サポート期限・6.0からの移行](/tech/details/10417/)
- [Unityを日本語化する方法（Unity 6対応）とUnity 6の新機能・変更点](/tech/details/4881/)
- [ユニティちゃん(Unity-chan)とは？ダウンロード・ピンク色の直し方・ライセンスをUnity 6対応で解説](/tech/details/4906/)
- [Photon Fusionとは？Fusion 2.1の3モードの違い・料金試算・PUN2からの移行【2026年10月】](/tech/details/6888/)

---

出典: [Unity AnimatorのUpdate Mode｜Normal・Fixed・UnscaledTimeの違いとAnimate Physics【Unity 6対応】](<https://www.issoh.co.jp/tech/details/3622/>)（株式会社一創）
