はとの豆知識

Unityを中心に手っ取り早い機能の実装を紹介します。

【Unity】プレイヤー、オブジェクトの移動範囲を制限させる方法「Mathf.Clamp」の紹介

シューティングゲームで実機を画面内に収めたい。
オブジェクトで無理やり移動を制限する方法を使用したくない。
そんな時に使えるMathf.Clampを紹介します。

手っ取り早い実装方法

    //移動速度
    private float moveSpeed = 4f;

    //回転
    private float rotateSpeed = 150f;
    private Vector3 rotasionVector = new Vector3(0, 0, 1);

    //移動制限処理用変数
    private Vector2 playerPos;
    private readonly float playerPosXClamp = 3.0f;
    private readonly float playerPosYClamp = 3.0f;

    private void Update()
    {
        ////前進処理
        transform.Translate(Vector3.up * this.moveSpeed * Time.deltaTime);
        // 移動制限処理
        this.MovingRestrictions();

        //回転処理
        if (Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(rotasionVector * this.rotateSpeed * Time.deltaTime);
        if (Input.GetKey(KeyCode.RightArrow))/// rotateSpeedに-を付けて逆回転
            transform.Rotate(rotasionVector * -this.rotateSpeed * Time.deltaTime);
    }


    /// <summary>
    /// 移動制限
    /// </summary>
    private void MovingRestrictions()
    {
        //変数に自分の今の位置を入れる
        this.playerPos = transform.position;

        //playerPos変数のxとyに制限した値を入れる
        //playerPos.xという値を-playerPosXClamp~playerPosXClampの間に収める
        this.playerPos.x = Mathf.Clamp(this.playerPos.x, -this.playerPosXClamp, this.playerPosXClamp);
        this.playerPos.y = Mathf.Clamp(this.playerPos.y, -this.playerPosYClamp, this.playerPosYClamp);

        transform.position = new Vector2(this.playerPos.x, this.playerPos.y);
    }

f:id:HatoHatter:20210516025713g:plain

見えない壁に阻まれるような感じで行けないようになっていますね。

詳しい解説

「Mathf.ClampはMathfクラスの関数の1つで、数値を指定した範囲内に収める
という処理です。

Mathf.Clamp(範囲内に制限したい値,最小の値,最大の値)
このようにして使用します。

まとめ

Mathfクラスには便利な関数が多くあります。
今後の記事でそれらも紹介できればと思います。

また、今回は数値を制限する形で移動制限を作りましたが
背景の上でのみ移動できるなどの制限方法も良さそうなので
作ったら記事にまとめる予定です。