为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
繁星点点滴滴 2021-11-14 15:55:38
我正在使用 Unity 制作 3D 游戏,并将使用Z, Q, S,D键(我使用 Azerty 键盘)和鼠标滚轮来四处移动相机以进行缩放。该escape键将切换相机的移动。我会让我的相机保持在最小和最大区域内。为此,我使用了两个变量min,max它们是Vector3. 这是 Unity 中的配置Main Camera:这是我的代码: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:我不会同时使用两条线。你能找出问题吗?
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

第 1 行不起作用,因为transform.Translate它将沿矢量移动对象,而不是朝向某个位置。您的代码正在以一定速度翻译对象,并限制速度而不是位置。


第 2 行不起作用,因为将运动矢量分配给位置只会将相机移动到您的矢量值。


尝试这个:


transform.Translate(direction * panSpeed * Time.deltaTime);  // move object

Vector3 pos = transform.position; // get position as Vector

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

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

transform.position = pos; // reassign clamped Vector to position


查看完整回答
反对 回复 2021-11-14
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信