キャラクター向き制御アルゴリズム 資料
目次
1. はじめに
キャラクターの左右向き制御は、2D アクションゲームやプラットフォーマーで必須の機能です。本資料では、Unity における簡潔かつ汎用的な「スプライト反転による向き制御」アルゴリズムを解説します。
2. アルゴリズム概要
- 入力方向取得
左右キーやアナログスティックから –1~+1 の値を取得。 - 符号判定
入力値の符号を調べ、正なら「右向き」、負なら「左向き」、ゼロなら向き維持。 - スプライト反転
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
を使い分け、当たり判定やアニメーションとの整合性を保ちましょう。
ディスカッション
コメント一覧
まだ、コメントがありません