UnityアクションゲームにおけるRigidbodyのメリット・デメリット

初めに

私はアクションゲームが昔から好きでいつか作りたいと思っていて、つい最近、完成させたゲームがあります。その中でいくつか Unity で実装する上で気になるところがありましたので、少しずつ作ってみたことで見えてきたことについても載せていこうと思いまして今回の記事になりました。
ゲーム制作の解説本や Udemy の講座を見てみると、Rigidbody を使用したジャンプがほとんどなので、これを使用するのが普通に思っていましたが、あくまで AI の情報源ではありますが、有名なインディーのタイトルなんかはジャンプ挙動には Rigidbody を使用していないというのも出てくるので気になっていました。
Rigidbody は Unity で物理演算の処理を自動で任せて、現実世界に近い挙動の動きができるなど何かと便利な標準的な機能ですが、一方で不便に感じるような場面もあるのでその辺りについて思うことを今回の記事では書いていきます。あくまでアクションゲームでの考え方なのでゲームのジャンルによって考慮することは多いかと思われます。

Rigidbodyのメリット・デメリット

 

Rigidbody を使うメリット

  • 物理演算を自動で行ってくれる
Unity の Rigidbody コンーネントをプレイヤーなどのジェクトに割り当てるだけで、重力などがで適され、ジャンプやなどなアクションの実装が少ない記述で実装ができます
public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 10f;
    private Rigidbody2D rb;
    
    void Start()
    {
        rb = GetComponent();
    }
    
    void Update()
    {
        // 水平移動
        float horizontal = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(horizontal * moveSpeed, rb.velocity.y);
        
        // ジャンプ
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }
}
  • 衝突判定の実装が簡単
には Collider のですが、Unity では Collider 同が接触したとイベントしており、接の処理(敵との、地面への、アイテム取得など)を簡単な述をするだけ扱えます。一般装に比て当たり定の計閾値管理をけるの便利です
public class CollisionHandler : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D collision)
    {
        // 敵との衝突
        if (collision.gameObject.CompareTag("Enemy"))
        {
            Debug.Log("敵に当たった!");
            // ダメージ処理など
        }
        
        // 地面との衝突
        if (collision.gameObject.CompareTag("Ground"))
        {
            Debug.Log("地面に着地した!");
            // 着地処理など
        }
    }
    
    void OnTriggerEnter2D(Collider2D other)
    {
        // アイテムとの接触
        if (other.CompareTag("Item"))
        {
            Debug.Log("アイテムを取得!");
            Destroy(other.gameObject);
        }
    }
}

Rigidbody を使うデメリット

  • ジャンプの細かい制御がむずかしい
例えばよう昇・下降でを付けたい場合、上下降の重力ールや初速を調整する必要があります。Rigidbody でもスケールことでことできますが、物理シレーションの都、完全りの曲停止動を再現するのは難しい場があります

 

  • 特殊な挙動の安定化が難しい
えば「滑る」など特殊ションれる、地形や接況によって物理演の結果が微妙変わり、挙動が安ないことあります。位置ベースの移動(Transform を直接、もしくは自速度更新)に替えると、こうした不要素を排やすく、想定外のバグがきにくいと思います。 
坂を滑る時に安定感がなかった(>_<)
坂を滑る時に安定感がなかった(>_<)

対策方法

あくまでアクションの挙動に対しては、Rigidbodyを使用すると使いづらい場面があるだけであり、当たり判定などでは使いやすいという面もあります。
そのための対応策としては、ColliderとRigidbodyを対象のオブジェクトにコンポーネントとして付与し、Rigidbodyを「キネマティック」に設定すると良いと思います。
この設定にしておくことで、当たり判定のみを取得しつつ、重力や物理演算的な処理を無効化できます。

まとめ

 Rigidbody のメリット・デメリットを書いてみましたが、今 Rigidbody を使ない部分を含むションゲーム作ってみる予定なので、またることがあれば追記してきたいと思います。アクションでも操作性が大事なゲームであったりストリー重視かで仕様も異なるので、ゲームの方針に合わせるといいですね。

最新情報をチェックしよう!
>
CTR IMG