読者です 読者をやめる 読者になる 読者になる

おもちゃラボ

Unityで遊びを作っていきます

マウストレーサー2

簡単なアニメーションの小ネタをストックしていきます。今回は第2回です。前回と同様、Unity上で動作するマウストレーサを作りたいとおもいます。前回とは少し挙動が異なっているのです。

作るもの

前回は、マウス位置と矢印オブジェクトの距離に応じて、近づいてこようとする速度を変えましたが、今回は加速度を変化させています。実行すると↓のような感じになりました〜。


マウス追跡2 - YouTube

プログラム

実は、なんと、びっくりすることに、前回の記事↓

マウストレーサー - おもちゃラボ
とほとんど変わっていません。びっくりしませんか、そうですか。変更点は、マウス位置と矢印オブジェクトの距離に応じて加速度を変化させている部分(☆)だけです。

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は定数とみなしたら、力と加速度は比例関係にあります。なんで、加速度とは力なのです。

マウス位置から遠いと、ガンガンちからを受けて、押されて、押されて、どんどんマウスに近づいてくる。逆に、マウスに近づくと、矢印オブジェクトに加わる力が小さくなって、速度もゆっくりになる。そんなデモでした。

参考書籍

Flash Math Creativity

Flash Math Creativity