簡単なアニメーションの小ネタをストックしていきます。今回は第2回です。前回と同様、Unity上で動作するマウストレーサを作りたいとおもいます。前回とは少し挙動が異なっているのです。
作るもの
前回は、マウス位置と矢印オブジェクトの距離に応じて、近づいてこようとする速度を変えましたが、今回は加速度を変化させています。実行すると↓のような感じになりました〜。プログラム
実は、なんと、びっくりすることに、前回の記事↓
マウストレーサー - おもちゃラボ
とほとんど変わっていません。びっくりしませんか、そうですか。変更点は、マウス位置と矢印オブジェクトの距離に応じて加速度を変化させている部分(☆)だけです。
const float FORCE = 0.06f; Vector3 v = new Vector3(0, 0, 0); void Update () { // マウスの座標をスクリーン座標系に変換 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 mousePos = new Vector3(ray.origin.x, ray.origin.y, 0); // マウスから矢印へのベクトルを正規化 Vector3 diff = mousePos - transform.position; Vector3 norm = diff.normalized; // 加速度ベクトルの計算 Vector3 a = norm * FORCE; // 速度ベクトルに足し込む(☆) v += a; // 座標と回転の更新 transform.position += v; // マウスの方向を向かせる float deg = Mathf.Atan2( diff.y, diff.x ) * Mathf.Rad2Deg; transform.eulerAngles = new Vector3(0, 0, deg-90); }
前回は、距離に比例して速度を調節していましたが、今回は、距離に応じて加速度を調整しています。では加速度とは何でしょう。イメージわきますか〜?加速度とは速度を時間微分したものでdv/dtなんすよっ!って言われてもイメージがわきませんよね・・・
加速度とは、力です。
加速度とは、力です。
加速度とは、力です。
ちょっと嘘ですが、大体あってます。
大切なことなので3回言いました。
F = maって聞いたことありますか〜?Fはforceで力、mはmassで質量、aはaccelerationで加速度です。mは定数とみなしたら、力と加速度は比例関係にあります。なんで、加速度とは力なのです。
マウス位置から遠いと、ガンガンちからを受けて、押されて、押されて、どんどんマウスに近づいてくる。逆に、マウスに近づくと、矢印オブジェクトに加わる力が小さくなって、速度もゆっくりになる。そんなデモでした。