在 Unity 中在最小和最大 X、Y 和 Z 坐标之间移动相机

我正在使用 Unity 制作 3D 游戏,并将使用ZQS,D(我使用 Azerty 键盘)和鼠标滚轮来四处移动相机以进行缩放。该escape键将切换相机的移动。

我会让我的相机保持在最小和最大区域内。为此,我使用了两个变量minmax它们是Vector3. 这是 Unity 中的配置Main Camera

http://img3.mukewang.com/6190c10e00018c9703670944.jpg

这是我的代码:


using UnityEngine;


public class CameraController : MonoBehaviour

{

    [Header("Speeds")]

    public float panSpeed = 30;

    public float scrollSpeed = 5;


    [Header("Movement")]

    public bool doMovement = true;


    [Header("Min and max values")]

    public Vector3 min;

    public Vector3 max;


    private void Update()

    {

        if (Input.GetKey(KeyCode.Escape))

        {

            doMovement = !doMovement;

        }


        if (doMovement)

        {

            if (Input.GetKey(KeyCode.Z))

            {

                Move(Vector3.forward);

            }

            else if (Input.GetKey(KeyCode.S))

            {

                Move(Vector3.back);

            }

            else if (Input.GetKey(KeyCode.Q))

            {

                Move(Vector3.left);

            }

            else if (Input.GetKey(KeyCode.D))

            {

                Move(Vector3.right);

            }


            float scroll = Input.GetAxis("Mouse ScrollWheel") * 1000;


            Vector3 pos = transform.position;

            pos.y -= scroll * scrollSpeed * Time.deltaTime;

            pos.y = Mathf.Clamp(pos.y, min.y, max.y);

            transform.position = pos;

        }

    }


    private void Move(Vector3 direction)

    {

        Vector3 pos = direction * panSpeed * Time.deltaTime;

        pos.x = Mathf.Clamp(pos.x, min.x, max.x);

        pos.z = Mathf.Clamp(pos.z, min.z, max.z);


        transform.Translate(pos, Space.World); // problem 1 

        transform.position = pos;              // problem 2

    }

}

问题是当我使用按键移动相机时。我已经尝试了两行不同的代码,但都不能像方面那样工作。这是我的问题。用我上面代码的注释行。

  • 第一行忽略最小值和最大值。

  • 第二行设置相机(0, 10, 0.4970074)在移动时始终开启。我按下后是这样的Q

http://img4.mukewang.com/6190c12400019ad007530632.jpg

我不会同时使用两条线。

你能找出问题吗?


繁星点点滴滴
浏览 141回答 1
1回答

MMMHUHU

第 1 行不起作用,因为transform.Translate它将沿矢量移动对象,而不是朝向某个位置。您的代码正在以一定速度翻译对象,并限制速度而不是位置。第 2 行不起作用,因为将运动矢量分配给位置只会将相机移动到您的矢量值。尝试这个:transform.Translate(direction * panSpeed * Time.deltaTime);  // move objectVector3 pos = transform.position; // get position as Vectorpos.x = Mathf.Clamp(pos.x, min.x, max.x); // clamp positionpos.z = Mathf.Clamp(pos.z, min.z, max.z);transform.position = pos; // reassign clamped Vector to position
打开App,查看更多内容
随时随地看视频慕课网APP