我想將我的相機圍繞物件水平旋轉 360 度,并希望將我的垂直旋轉限制在 -45 到 45 度之間。我在互聯網上找到了一些解決方案,但它們都不適用于滑鼠點擊輸入。這是我沒有垂直旋轉限制的作業代碼。
[SerializeField]
private Camera _camera;
[SerializeField]
private Transform target;
private Vector3 previousPosition;
// Start is called before the first frame update
void Start()
{
}
Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
previousPosition = _camera.ScreenToViewportPoint(Input.mousePosition);
}
if (Input.GetMouseButton(0))
{
Vector3 direction = previousPosition - _camera.ScreenToViewportPoint(Input.mousePosition);
_camera.transform.position = target.position;
_camera.transform.Rotate(new Vector3(1, 0, 0), direction.y * 180);
_camera.transform.Rotate(new Vector3(0, 1, 0), -direction.x * 180, Space.World);
_camera.transform.Translate(new Vector3(0, 0.3f, -3));
previousPosition = _camera.ScreenToViewportPoint(Input.mousePosition);
}
}
如果有人可以指出我如何限制對我非常有幫助的垂直旋轉。
謝謝
uj5u.com熱心網友回復:
老實說,該Rotate
命令是一種相對方法,用于限制低效率。要解決限制相機的問題,必須有固定且可控的變數。將下面的代碼附加到相機上,解決了約束問題,但請記住,相機的區域角度是有限的。為了確定相機的角度和方向,孩子將其清空并在主方向上旋轉空放,
public float LimitAngleX = 45;
public float LimitAngleY = 180;
private float AngleX;
private float AngleY;
public float sensitivity = 10f;
public void Update()
{
var angles = transform.localEulerAngles;
var xAxis = Input.GetAxisRaw("Mouse X") * Time.unscaledDeltaTime * sensitivity;
var yAxis = Input.GetAxisRaw("Mouse Y") * Time.unscaledDeltaTime * sensitivity;
AngleX = Mathf.Clamp (AngleX-yAxis, -LimitAngleX, LimitAngleX);
AngleY = Mathf.Clamp (AngleY xAxis, -LimitAngleY, LimitAngleY);
angles.x = AngleX;
angles.y = AngleY;
var euler = Quaternion.Euler (angles);
transform.localRotation = euler;
transform.localEulerAngles = angles;
}
uj5u.com熱心網友回復:
他們認為您認為相機旋轉系統很棒,但它可能存在一些問題,我強烈建議您在 youtube 上關注一個名為Brakeys的人,他制作了一個完美的移動和旋轉系統。無論如何,您可以使用一種方法Mathf.Clamp
來設定浮點數的最小和最大數,而不會超過這些限制。這是一個不會起作用的示例,而是演示。
float cameraLimits = Mathf.Clamp(MouseY, 20 ,90);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488297.html
上一篇:如何在Unity中進行矢量加法