減衰係数という機能ではなく、どうやったら減衰係数をかけられるか、つまり今ある「速度」をどうやったら〇%ずつ減らして徐々に遅くすることができるか……というような記事です。
初期状態
//Unity C#
//移動・回転の速さ
float speed = 0;
void Update()
{
this.transform.Rotate(0, 0, speed);
}
void OnMouseDown()
{
//クリックすると速さを10にする
speed = 10;
}
こんな感じのコードを書いて、コライダーを付けたオブジェクトにセットしておきます。
クリックすると回転速度が変わり、Updateで常に回転する命令がかかっているので、
クリックすると回転速度が変わり、Updateで常に回転する命令がかかっているので、
一度クリックすると、永遠に回り続けます。
直線状に減速
//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;と同じ意味です。
ちなみにspeed -= 0.01f;はspeed = speed – 0.01f;と同じ意味です。
実行結果です。これはこれで悪くはないですが、
//Unity C#
void Update()
{
if(speed > 0)
{
//減速係数
speed *= 0.995f;
this.transform.Rotate(0, 0, speed);
}
}
原則係数で複利的に速度を減らす場合と比較してみましょう。こちらは処理が走るたびに、現在の速度×0.995に速度が微調整されるので、速度が遅くなるほど減速幅も小さくなります。
結果はこれ。最後にじわっと余韻が残るような止まり方となります。
ちなみにこちらの処理だと、speedは原理上0になることはなく、無限に減速し続けます。その幅があまりに小さいため、見かけ上止まって見えているだけです。気になるなら時間で区切ってもいいかもしれません。
ちなみにこちらの処理だと、speedは原理上0になることはなく、無限に減速し続けます。その幅があまりに小さいため、見かけ上止まって見えているだけです。気になるなら時間で区切ってもいいかもしれません。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント