【Unity】RigidBodyを使ったゲームらしい移動方法について探る

RigidBodyを使ったプレイヤーの動き、手早く作ると多分これが一番早いと思います。

Rigidbody2D rb = GetComponent<Rigidbody2D>();
if (rb)
{
    float hori = Input.GetAxis("Horizontal");
    float speed = 5.0f;

    rb.velocity = new Vector2(hori  * speed, m_rb.velocity.y);
}

ただ、この処理だと加速減速がありません。
ゲームのキャラクターの最高速までの動きはすぐに到達してほしい。
そして、ボタンを離したらいい感じに減速してほしい。

ゲームとしてちゃんとした移動を作りたい…と思って調べたら
分かりやすい解説動画がありました。
youtu.be

ありがたいことに、ソースコードも配布されているので
解析して自分なりに調べてみました。 github.com

解析

プレイヤーの移動についての処理部分のみを抜き取るとこのような形です。


加速率の(1.0f/Time.fixedDeltaTime)の部分は50というマジックナンバーでしたが
Unityの物理処理はFixedUpdate()で行われており
合わせるために50にしたのではないかな~…と思います。



良い感じの動きを作ることが出来ました。

他人が作ったコードを参考にして自分のソースコードに翻訳して取り入れてみました。
自分で一つ一つ手元で計算しながら取り入れていくと理解がしやすい!

海外の方なので関数名・変数名も参考になります。
この人は移動をRunダッシュDashという風に切り分けていました。
私なら雑にMoveとかにしてた。

参考資料

Improve your Platformer with Acceleration | Examples in Unity - YouTube
GitHub - DawnosaurDev/platformer-movement