キャラクター向き制御アルゴリズム 資料


1. はじめに

キャラクターの左右向き制御は、2D アクションゲームやプラットフォーマーで必須の機能です。本資料では、Unity における簡潔かつ汎用的な「スプライト反転による向き制御」アルゴリズムを解説します。


2. アルゴリズム概要

  1. 入力方向取得
    左右キーやアナログスティックから –1~+1 の値を取得。
  2. 符号判定
    入力値の符号を調べ、正なら「右向き」、負なら「左向き」、ゼロなら向き維持。
  3. スプライト反転
    transform.localScale.x または SpriteRenderer.flipX を切り替え、スプライトを反転。

3. 実装例

3.1. localScale を使う方法

void Update()
{
    float horizontalInput = Input.GetAxisRaw("Horizontal");
    if (horizontalInput != 0f)
    {
        Vector3 scale = transform.localScale;
        scale.x = Mathf.Sign(horizontalInput) * Mathf.Abs(scale.x);
        transform.localScale = scale;
    }
}

3.2. SpriteRenderer.flipX を使う方法

private SpriteRenderer spriteRenderer;

void Start()
{
    spriteRenderer = GetComponent<SpriteRenderer>();
}

void Update()
{
    float horizontalInput = Input.GetAxisRaw("Horizontal");
    if (horizontalInput > 0f)      spriteRenderer.flipX = false;
    else if (horizontalInput < 0f) spriteRenderer.flipX = true;
}

4. 各ステップ詳細

ステップ処理内容ポイント
1. 入力取得Input.GetAxisRaw("Horizontal") で –1, 0, +1 を取得アナログ入力も符号のみ扱える
2. 符号判定Mathf.Sign または単純比較で左右を判別0 のときは処理スキップで向き固定
3. 反転– Scale: `scale.x = ±scale.x

5. 応用と注意点

  • 当たり判定への影響
    Scale を反転するとコライダーも反転するため、形状が崩れる場合は flipX を推奨。
  • アニメーションとの連携
    Animator の向きパラメータを追加して、アニメーション側でも左右を保持する方法がある。
  • 入力のスムージング
    GetAxis(Raw でない)を使えば壁擦り時の微小入力にも対応可能。

6. まとめ

左右入力の符号に応じてスプライトを反転するだけで、安定した向き制御が実現できます。
プロジェクト要件に応じて localScale と flipX を使い分け、当たり判定やアニメーションとの整合性を保ちましょう。

Unity,Unity6

Posted by hidepon