オブジェクトを加速移動させる(動画あり)
今回はオブジェクトを加速移動する方法を紹介します。
~ public class AcceleMove : MonoBehaviour { [SerializeField] float XSpeed; // 現在のX軸のスピード [SerializeField] float YSpeed; // 現在のY軸のスピード [SerializeField] float addSpeed; // 1フレーム毎にスピードに加算する量 [SerializeField] float subSpeed; // 1フレーム毎にスピードに減速する量 [SerializeField] float SpeedMax; // 最大速度 void Update() { //右の矢印キーが押された場合 if (Input.GetKey(KeyCode.RightArrow)) { //プラスX軸の速さが最大ではない場合 if (XSpeed < SpeedMax) { //X軸のプラス(右)方向に加算 XSpeed += addSpeed; } } //左の矢印キーが押された場合 if (Input.GetKey(KeyCode.LeftArrow)) { //マイナスX軸の速さが最大ではない場合 if (XSpeed > -SpeedMax) { //X軸のプラス(左)方向に加算 XSpeed += addSpeed * -1; } } //上の矢印キーが押された場合 if (Input.GetKey(KeyCode.UpArrow)) { //プラスY軸の速さが最大ではない場合 if (YSpeed < SpeedMax) { //Y軸のプラス(上)方向に加算 YSpeed += addSpeed; } } //下の矢印キーが押された場合 if (Input.GetKey(KeyCode.DownArrow)) { //マイナスY軸の速さが最大ではない場合 if (YSpeed > -SpeedMax) { //Y軸のマイナス(下)方向に加算 YSpeed += addSpeed * -1; } } //左右の矢印キーが押されていない場合 if (!Input.GetKey(KeyCode.RightArrow) && !Input.GetKey(KeyCode.LeftArrow)) { //右側に加速している場合 if(XSpeed>0) { //減速させる //Mathf.Maxは二つの引数のうち大きい値が取得される XSpeed = Mathf.Max(0, XSpeed - subSpeed); } //左側に加速している場合 else if(XSpeed<0) { //減速させる //Mathf.Minは二つの引数のうち小さい値が取得される XSpeed = Mathf.Min(0, XSpeed + subSpeed); } } //上の上下版 if (!Input.GetKey(KeyCode.UpArrow) && !Input.GetKey(KeyCode.DownArrow)) { if (YSpeed > 0) { YSpeed = Mathf.Max(0, YSpeed - subSpeed); } else if (YSpeed < 0) { YSpeed = Mathf.Min(0, YSpeed + subSpeed); } } //X,Y軸ともにその速度分加算される this.transform.position += new Vector3(XSpeed, YSpeed, 0); } } ~
addSpeedに加速値
subSpeedに減速値
SpeedMaxに最大速度
を記入すると動きます。
Mathf.Max(num1,num2)は二つのうちの大きい値が取得できます。
Mathf.Min(num1,num2)は二つのうちの小さい値が取得できます。
今回は減速の計算で、速度を0に近づけるために使用しました。
詳しくはリファレンスを参照してください。
Mathf.MaxリファレンスMathf-Max - Unity スクリプトリファレンス
Mathf.MinリファレンスMathf-Min - Unity スクリプトリファレンス