我正在使用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 :(得分:2)
第1行不起作用,因为transform.Translate
将使对象沿Vector(而不是位置)移动。您的代码以一定的速度平移对象,并以速度而不是位置来固定。
第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