Animation Parameters とは?
Animation Parametersは、Animator Controllerでアニメーションを制御するための変数です。スクリプトからパラメータの値を変更することで、キャラクターの状態に応じて動的にアニメーションを切り替えることができます。
例えば、キャラクターの移動速度に応じてアニメーションを変える場合:
Speedパラメータ =0.0→ 待機アニメーションSpeedパラメータ =3.0→ 歩行アニメーションSpeedパラメータ =7.0→ 走行アニメーション
パラメータはAnimator ControllerのTransition(遷移)条件や、Blend Treeの制御に使用されます。
Animator ControllerとParametersの関係
Animator Controllerは、複数のState(状態)とTransition(遷移)で構成されたステートマシンです。Parametersはこのステートマシンを外部から制御するための橋渡し役です。
流れ:
- スクリプトから
Animatorコンポーネントに値を設定 Parametersが更新されるTransitionの条件が満たされる- アニメーションが切り替わる
パラメータの種類と特性
Animation Parametersには4つの種類があります。それぞれ用途と特性が異なります。
Float型パラメータ
Float型は、小数を含む連続的な値を扱います。
用途
- 移動速度(
Speed) - 体力の割合(
HealthRatio) - ターゲットまでの距離(
Distance) - ジャンプの高さ(
JumpHeight)
Blend Treeとの連携
Float型はBlend Treeとの相性が良く、値の変化に応じて複数のアニメーションを滑らかに混ぜ合わせることができます。
// 移動速度を設定(0.0〜10.0の範囲)
_animator.SetFloat("Speed", 5.5f);
デフォルト値の設定
AnimatorウィンドウのParametersタブで、初期値を設定できます。ゲーム開始時にこの値が適用されます。

Int型パラメータ
Int型は、整数値を扱います。段階的な状態や、カウント値の管理に適しています。
用途
- コンボ数(
ComboCount) - 攻撃の種類(
AttackType:1=弱攻撃、2=強攻撃、3=必殺技) - ステージ番号(
StageNumber) - 装備中の武器ID(
WeaponID)
複数の状態の管理
Int型を使うことで、複数の異なる状態を1つのパラメータで管理できます。
// 攻撃タイプを設定
// 1: 弱攻撃、2: 強攻撃、3: 必殺技
_animator.SetInt("AttackType", 2);
Switch的な使い方
Transitionの条件でInt型パラメータを使うと、switch文のように複数の分岐を作れます。
例:
AttackType=1→ 弱攻撃アニメーションAttackType=2→ 強攻撃アニメーションAttackType=3→ 必殺技アニメーション
Bool型パラメータ
Bool型は、true/falseの2値を扱います。ON/OFFの状態管理に使用します。
用途
- 地面にいるか(
IsGrounded) - ダメージ中か(
IsDamaged) - ガード中か(
IsGuarding) - 武器を構えているか(
IsAiming)
複数条件の組み合わせ
複数のBool型パラメータを組み合わせて、複雑な条件を表現できます。
例:
IsGrounded = trueかつIsMoving = true→ 地上移動アニメーションIsGrounded = false→ ジャンプアニメーション
// 地面にいる状態を設定
_animator.SetBool("IsGrounded", true);
// ガード状態を設定
_animator.SetBool("IsGuarding", false);
Trigger型パラメータ
Trigger型は、一度きりのイベントを発火させます。設定後、自動的にリセットされます。
用途
- ジャンプ(
Jump) - 攻撃(
Attack) - スキル発動(
ActivateSkill) - ダメージを受ける(
TakeDamage) - 死亡(
Die)
Triggerの自動リセット
Triggerは、Transitionが実行されると自動的に****false****にリセットされます。そのため、繰り返し発火させることができます。
// ジャンプトリガーを発火
_animator.SetTrigger("Jump");
// 攻撃トリガーを発火
_animator.SetTrigger("Attack");
BoolとTriggerの使い分け
| 特徴 | Bool | Trigger |
|---|---|---|
| 持続性 | 明示的に変更するまで保持 | 自動でリセット |
| 用途 | 状態の管理 | 一時的なイベント |
| 例 | IsGrounded(地面にいる) | Jump(ジャンプする) |
Bool を使うべき場合:
- 状態が継続する(地面にいる、ガード中)
- 明示的にON/OFFを切り替える必要がある
Trigger を使うべき場合:
- 一瞬のアクション(ジャンプ、攻撃)
- ボタンを押した瞬間のイベント
パラメータの命名規則とベストプラクティス
パラメータ名の付け方は、プロジェクトの保守性に大きく影響します。
一貫性のある命名
チーム全体で統一したルールを決めることが重要です。
推奨:
- プロジェクト全体で同じ命名規則を使う
- ドキュメントに命名ルールを記載する
- コードレビューで命名をチェックする
重要なのは、プロジェクト内で統一することです。
スクリプトからの効率的な制御
パラメータをスクリプトから効率的に制御する方法を見ていきます。
ハッシュ値による最適化
パラメータ名を文字列で指定すると、毎回文字列検索が発生し、パフォーマンスが低下します。
Animator.StringToHash()の活用
Animator.StringToHash()を使って、パラメータ名を整数のハッシュ値に変換します。
using UnityEngine;
public class AnimatorController : MonoBehaviour
{
private Animator _animator;
// パラメータ名をハッシュ値に変換(readonly fieldで保持)
private readonly int _speedHash = Animator.StringToHash("Speed");
private readonly int _isGroundedHash = Animator.StringToHash("IsGrounded");
private readonly int _jumpHash = Animator.StringToHash("Jump");
private void Start()
{
_animator = GetComponent<Animator>();
}
private void Update()
{
// ハッシュ値を使用(高速)
_animator.SetFloat(_speedHash, 5.0f);
_animator.SetBool(_isGroundedHash, true);
_animator.SetTrigger(_jumpHash);
}
}
パフォーマンスへの影響
文字列を使用した場合(遅い):
_animator.SetFloat("Speed", speed); // 毎回文字列検索
ハッシュ値を使用した場合(速い):
_animator.SetFloat(_speedHash, speed); // 整数値で直接アクセス
パフォーマンス差:
- ハッシュ値は約10倍高速
- フレーム毎に複数回呼び出す場合は、ハッシュ値が必須
Damping Timeによる滑らかな変化
SetFloat()の第3引数にDamping Timeを指定すると、値が滑らかに変化します。
急激な変化を避ける
パラメータ値が急激に変化すると、アニメーションがカクついて見えます。
Damping Time なし:
_animator.SetFloat(_speedHash, targetSpeed);
// 値が即座に変わる → カクつく
Damping Time あり:
_animator.SetFloat(_speedHash, targetSpeed, 0.1f, Time.deltaTime);
// 0.1秒かけて徐々に変化 → 滑らか
アニメーションの自然な遷移
using UnityEngine;
public class SmoothMovement : MonoBehaviour
{
[SerializeField] private float _dampingTime = 0.1f;
private Animator _animator;
private float _currentSpeed;
private float _targetSpeed;
private readonly int _speedHash = Animator.StringToHash("Speed");
private void Start()
{
_animator = GetComponent<Animator>();
}
private void Update()
{
// 入力に応じてターゲット速度を設定
_targetSpeed = Input.GetKey(KeyCode.LeftShift) ? 7.0f : 3.0f;
// Damping Timeで滑らかに変化
_animator.SetFloat(_speedHash, _targetSpeed, _dampingTime, Time.deltaTime);
}
}
DampingTimeを指定した場合の値の変化は以下の様になります。
Value1は1で、Value2は5を指定して、10まで値を変動させています。

パラメータの取得
現在のパラメータ値を取得して、状態を確認できます。
float speed = _animator.GetFloat(_speedHash);
bool isGrounded = _animator.GetBool(_isGroundedHash);
実践例:複雑なパラメータ制御
実際のゲームで使用される、複雑なパラメータ制御の例を見ていきます。
例1: コンボシステム
Int型で攻撃段階を管理し、Triggerで次の攻撃を受け付けます。
using UnityEngine;
public class ComboSystem : MonoBehaviour
{
[SerializeField] private float _comboTimeout = 1.5f;
private Animator _animator;
private int _comboCount = 0;
private float _lastAttackTime;
private readonly int _comboCountHash = Animator.StringToHash("ComboCount");
private readonly int _attackHash = Animator.StringToHash("Attack");
private void Start()
{
_animator = GetComponent<Animator>();
}
private void Update()
{
// 攻撃入力
if (Input.GetMouseButtonDown(0))
{
PerformAttack();
}
// タイムアウト処理
if (Time.time - _lastAttackTime > _comboTimeout)
{
ResetCombo();
}
}
private void PerformAttack()
{
// コンボカウントを増やす
_comboCount++;
_comboCount = Mathf.Clamp(_comboCount, 1, 3); // 最大3コンボ
// Animatorに設定
_animator.SetInteger(_comboCountHash, _comboCount);
_animator.SetTrigger(_attackHash);
_lastAttackTime = Time.time;
Debug.Log($"Combo {_comboCount}段目");
}
private void ResetCombo()
{
if (_comboCount > 0)
{
_comboCount = 0;
_animator.SetInteger(_comboCountHash, 0);
Debug.Log("Combo reset");
}
}
}
Animator Controller側の設定:
Int型パラメータComboCountを作成Trigger型パラメータAttackを作成Transitionの条件:Attack TriggerかつComboCount = 1→ 1段目攻撃Attack TriggerかつComboCount = 2→ 2段目攻撃Attack TriggerかつComboCount = 3→ 3段目攻撃
例2: ダメージとリアクション
Triggerでダメージアニメーション、Floatでダメージの強さ、Boolでガード状態を管理します。
using UnityEngine;
public class DamageSystem : MonoBehaviour
{
[SerializeField] private float _maxHealth = 100f;
private Animator _animator;
private float _currentHealth;
private bool _isGuarding;
private readonly int _takeDamageHash = Animator.StringToHash("TakeDamage");
private readonly int _damageStrengthHash = Animator.StringToHash("DamageStrength");
private readonly int _isGuardingHash = Animator.StringToHash("IsGuarding");
private readonly int _healthRatioHash = Animator.StringToHash("HealthRatio");
private void Start()
{
_animator = GetComponent<Animator>();
_currentHealth = _maxHealth;
}
private void Update()
{
// ガード入力
_isGuarding = Input.GetKey(KeyCode.LeftControl);
_animator.SetBool(_isGuardingHash, _isGuarding);
}
// ダメージを受ける
public void TakeDamage(float damage)
{
// ガード中はダメージ半減
if (_isGuarding)
{
damage *= 0.5f;
Debug.Log($"ガード成功!ダメージ: {damage}");
}
_currentHealth -= damage;
_currentHealth = Mathf.Max(_currentHealth, 0);
// ダメージの強さを正規化(0.0〜1.0)
float damageStrength = damage / _maxHealth;
// Animatorに設定
_animator.SetTrigger(_takeDamageHash);
_animator.SetFloat(_damageStrengthHash, damageStrength);
_animator.SetFloat(_healthRatioHash, _currentHealth / _maxHealth);
Debug.Log($"HP: {_currentHealth}/{_maxHealth}");
}
}
Animator Controller側の設定:
Trigger型TakeDamage- ダメージアニメーションを発火Float型DamageStrength- ダメージの強さ(0.0〜1.0)Bool型IsGuarding- ガード状態Float型HealthRatio- 体力の割合
例3: 移動状態の総合管理
複数のパラメータを組み合わせて、移動状態を管理する例:
Speed(Float) - 移動速度VelocityX/Z(Float) - 方向IsGrounded(Bool) - 地面判定Jump,Land(Trigger) - ジャンプ/着地イベント
パラメータのデバッグ方法
パラメータが正しく動作しているか確認する方法を見ていきます。
Animator Windowでのリアルタイム確認
ゲーム実行中に、Animatorウィンドウでパラメータの値をリアルタイムで確認できます。
手順:
- ゲームを再生モードにする
Animatorウィンドウを開く(Window > Animation > Animator)Parametersタブを表示
パラメータの現在値が表示され、リアルタイムで変化する様子が見えます。

パラメータ値の手動変更
Animatorウィンドウ上で、パラメータ値を手動で変更できます。これにより、特定の値でのアニメーションをテストできます。
複数のAnimator間でのパラメータ管理
複数のキャラクターやAnimatorがある場合の、効率的なパラメータ管理方法です。
パラメータマネージャーパターン
パラメータ名のハッシュ値を一元管理するクラスを作成します。
using UnityEngine;
/// <summary>
/// Animatorパラメータのハッシュ値を一元管理
/// </summary>
public static class AnimationParameters
{
// 移動関連
public static readonly int Speed = Animator.StringToHash("Speed");
public static readonly int VelocityX = Animator.StringToHash("VelocityX");
public static readonly int VelocityZ = Animator.StringToHash("VelocityZ");
// 状態関連
public static readonly int IsGrounded = Animator.StringToHash("IsGrounded");
public static readonly int IsDamaged = Animator.StringToHash("IsDamaged");
public static readonly int IsGuarding = Animator.StringToHash("IsGuarding");
// アクション関連
public static readonly int Jump = Animator.StringToHash("Jump");
public static readonly int Attack = Animator.StringToHash("Attack");
public static readonly int Land = Animator.StringToHash("Land");
// 戦闘関連
public static readonly int ComboCount = Animator.StringToHash("ComboCount");
public static readonly int AttackType = Animator.StringToHash("AttackType");
public static readonly int HealthRatio = Animator.StringToHash("HealthRatio");
}
複数キャラクターの統一的な制御
AnimationParametersクラスを使用することで、複数のキャラクターで同じパラメータ名を統一できます。
using UnityEngine;
public class CharacterAnimator : MonoBehaviour
{
private Animator _animator;
private void Start()
{
_animator = GetComponent<Animator>();
}
public void SetSpeed(float speed)
{
// 一元管理されたハッシュ値を使用
_animator.SetFloat(AnimationParameters.Speed, speed);
}
public void Jump()
{
_animator.SetTrigger(AnimationParameters.Jump);
}
public void SetGrounded(bool isGrounded)
{
_animator.SetBool(AnimationParameters.IsGrounded, isGrounded);
}
}
パラメータの最適化とパフォーマンス
パラメータを効率的に使用するための最適化テクニックです。
不要なパラメータの削除
使用していないパラメータは削除しましょう。
確認方法:
Animator Controllerウィンドウで全てのTransitionを確認- 条件で使用されていないパラメータをチェック
- スクリプトでも使用されていないことを確認
- 削除
更新頻度の最適化
パラメータの更新頻度を最適化することで、パフォーマンスを改善できます。
毎フレーム更新が必要なパラメータ:
Speed(移動速度)VelocityX,VelocityZ(方向)
イベント発生時のみ更新:
IsGrounded(地面判定の変化時)IsGuarding(ガードの開始/終了時)Trigger系(アクション発生時)
using UnityEngine;
public class OptimizedAnimator : MonoBehaviour
{
private Animator _animator;
private bool _isGrounded;
private bool _previousIsGrounded;
private readonly int _isGroundedHash = Animator.StringToHash("IsGrounded");
private void Update()
{
_isGrounded = CheckGrounded();
// 値が変化した時のみ更新
if (_isGrounded != _previousIsGrounded)
{
_animator.SetBool(_isGroundedHash, _isGrounded);
_previousIsGrounded = _isGrounded;
}
}
private bool CheckGrounded()
{
// 地面判定のロジック
return Physics.Raycast(transform.position, Vector3.down, 1.1f);
}
}
よくある問題と解決方法
パラメータが反映されない
原因と解決策:
Has Exit Timeが設定されている →OFFにするTransitionの条件優先順位 → より具体的な条件を上に配置
Triggerが発火しない
原因と解決策:
- 同じフレームで複数回呼び出し → 1回だけ呼び出す
- 条件設定ミス →
TransitionのConditionsを確認 - 必要に応じて
_animator.ResetTrigger()で明示的にリセット
アニメーションがカクつく
原因と解決策:
Damping Time未設定 →SetFloat()の第3引数で指定Transition Durationが短すぎる →0.2〜0.3程度に設定
まとめ
Animation Parametersは、スクリプトからAnimator Controllerを制御するための重要な仕組みです。
重要なポイント
- 4つのパラメータ型 -
Float,Int,Bool,Triggerを適切に使い分ける - ハッシュ値の使用 -
Animator.StringToHash()でパフォーマンスを最適化 Damping Time- 滑らかな値の変化で自然なアニメーション- 命名規則 - 一貫性のある命名でメンテナンス性を向上
- デバッグ -
Animatorウィンドウでリアルタイム確認
効率的な使い方
以下のような場面でパラメータを活用してください:
- キャラクターの状態に応じたアニメーション切り替え
Blend Treeでの滑らかなアニメーション制御- コンボシステムや複雑な戦闘システム
- デバッグとチューニング
Animation Parametersを適切に管理して、動的で魅力的なキャラクターアニメーションを実現しましょう!
📣おしらせ!
Unity Asset Storeで
世界を揺るがすフラッシュセール
が開催中です。
最高のワールド制作に必要なすべてが、24時間限定で70% OFF!