Unityをスクリプトで動かしたい!

Unityでオブジェクトを操作する方法を紹介してます!

オブジェクトを加速移動させる(動画あり)

今回はオブジェクトを加速移動する方法を紹介します。

~
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);
    }
}
~

f:id:SugieSan:20210219001816g:plain
addSpeedに加速値
subSpeedに減速値
SpeedMaxに最大速度
を記入すると動きます。

Mathf.Max(num1,num2)は二つのうちの大きい値が取得できます。
Mathf.Min(num1,num2)は二つのうちの小さい値が取得できます。
今回は減速の計算で、速度を0に近づけるために使用しました。
詳しくはリファレンスを参照してください。

Mathf.MaxリファレンスMathf-Max - Unity スクリプトリファレンス

Mathf.MinリファレンスMathf-Min - Unity スクリプトリファレンス