バッテラが如く

いつもお世話になっております。

【Unity】AddForceを使い徐々に加速して指定速度までいったら定速にしていく (Rigidbody AddForce ForceMode)

この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1)
  • Unity (2021.3.2f1)
  • Unity

    実装方法

    先にコードを書いてその後に解説します。

    private void FixedUpdate()
    {
        float targetSpeed = 5.0f;
        float power = 10.0f;
    
        var rigidbody = GetComponent<Rigidbody>();
    
        Vector3 forceDir = Vector3.right; // X軸方向に力を加える
        float forcePower = power * (targetSpeed - rigidbody.velocity.x);
    
        rigidbody.AddForce(forceDir * forcePower, ForceMode.Force);
    }
    

    徐々に加速させるには?

    ForceModeForceAccelerationを使います。

    それ以外は瞬時に加速してしまうので調整がしずらいためです。

    ForceModeについては以下の記事で詳しく書いたので確認してね♫

    www.m2game.net

    指定速度に制限するには?

    現在速度指定速度を計算して、コントールします。

    現在速度は rigidbody.velocityで取得できます。

    float forcePower = power * (targetSpeed - rigidbody.velocity.x);
    ````
    
    ```power```の値を変えると指定速度までに到達する時間を調整できます。
    
    ```AddForce```はマイナスの値にも対応していますので、仮に速度がオーバーしていてもマイナスの力が加わり指定速度に近づきます。