Unity C#で回転をカーブをかけて遅くする方法/減衰係数の使い方

fairground IT

減衰係数という機能ではなく、どうやったら減衰係数をかけられるか、つまり今ある「速度」をどうやったら〇%ずつ減らして徐々に遅くすることができるか……というような記事です。

スポンサーリンク

初期状態

//Unity C#
//移動・回転の速さ
float speed = 0;

    void Update()
    {
        this.transform.Rotate(0, 0, speed);
    }

    void OnMouseDown()
    {
        //クリックすると速さを10にする
        speed = 10;
    }
こんな感じのコードを書いて、コライダーを付けたオブジェクトにセットしておきます。
クリックすると回転速度が変わり、Updateで常に回転する命令がかかっているので、
unity 回転 減衰 rotate 1
一度クリックすると、永遠に回り続けます。

直線状に減速

//Unity C#
    void Update()
    {
    //speedが0より大きい場合
        if(speed > 0)
        {
            speed -= 0.01f;
            this.transform.Rotate(0, 0, speed);
        }

    }
まず単純に同じ値ずつスピードを下げた場合。グラフにすると、直線状にスピードが減速します。
ちなみにspeed -= 0.01f;speed = speed – 0.01f;と同じ意味です。
unity 回転 減衰 rotate 2
実行結果です。これはこれで悪くはないですが、
//Unity C#
    void Update()
    {
        if(speed > 0)
        {
      //減速係数
            speed *= 0.995f;
            this.transform.Rotate(0, 0, speed);
        }

    }
原則係数で複利的に速度を減らす場合と比較してみましょう。こちらは処理が走るたびに、現在の速度×0.995に速度が微調整されるので、速度が遅くなるほど減速幅も小さくなります。
unity 回転 減衰 rotate 3
結果はこれ。最後にじわっと余韻が残るような止まり方となります。
ちなみにこちらの処理だと、speedは原理上0になることはなく、無限に減速し続けます。その幅があまりに小さいため、見かけ上止まって見えているだけです。気になるなら時間で区切ってもいいかもしれません。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント