Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -JavaScriptでアニメーション-

最初の方でちょっと書きましたが,きちんとまとめます

基本的なこと
・移動や回転は,function Update内に記述する
・function Updateが実行される間隔は一定では無い(ここが重要)

つまり,ただ単に動かすと,性能の良いパソコンでは速く動いて,ショボいパソコンでは遅く動くようになってしまうわけです
それを防ぐ為に,最後に描画してからの経過時間 Time.deltaTimeを掛けて,移動量を算出する方法を取るのが一般的です(必ずしもこの方法が一番良いとは限りません)
Time.deltaTimeを掛けることで,毎秒○○する,と言う状態になります

・一定速度で移動する
this.transform.Translate(「X軸移動量」 * Time.deltaTime, 「Y軸移動量」 * Time.deltaTime, 「Z軸移動量」 * Time.deltaTime);

・一定速度で回転する
this.transform.Rotate(「X軸回転量」 * Time.deltaTime, 「Y軸回転量」 * Time.deltaTime, 「Z軸回転量」 * Time.deltaTime);


・特定のゲームオブジェクトの方を向く(回転)
this.transform.LookAt(「オブジェクト」.transform.position);

・特定のゲームオブジェクトの方にゆっくり向く(回転)
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(「オブジェクト」.transform.position), Time.time * 0.01);

・特定のゲームオブジェクトの方に向いて移動する
if (0.1 < Vector3.Distance(this.transform.position, 「オブジェクト」.transform.position)) {
	this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(「オブジェクト」.transform.position - this.transform.position), Time.time * 0.1);
	this.transform.position = this.transform.position + this.transform.forward * Time.time * 0.01;
}
オブジェクトの方を向きながら,近づいていきます
距離を求めて,近くなったら止めています(小数点以下でぶれていつまでも止まらない為)

・特定のゲームオブジェクトの周囲を旋回する(等速円運動の公式に当てはめてみた)
var kakudo : float = 0;
をグローバル変数に宣言
var r : float = Vector3.Distance(this.transform.position, 「オブジェクト」.transform.position);
var rad : float = kakudo * Mathf.Deg2Rad;
this.transform.position.x = 「オブジェクト」.transform.position.x + r * Mathf.Cos(rad);
this.transform.position.z = 「オブジェクト」.transform.position.z + r * Mathf.Sin(rad);

kakudo = kakudo + 0.5;


TOPプログラマ専用Unityでゲーム開発