我有這個代碼,但我一直無法找到一個合適的解決方案來將 X 軸夾在 2 個角度值之間。在這種情況下怎么辦?
public class CameraController : MonoBehaviour {
public float cameraSmoothness = 5f;
private Quaternion targetGlobalRotation;
private Quaternion targetLocalRotation = Quaternion.Identity;
private void Start(){
targetGlobalRotation = transform.rotation;
}
private void Update(){
targetGlobalRotation *= Quaternion.Euler(
Vector3.up * Input.GetAxis("Mouse X"));
targetLocalRotation *= Quaternion.Euler(
Vector3.right * -Input.GetAxis("Mouse Y"));
transform.rotation = Quaternion.Lerp(
transform.rotation,
targetGlobalRotation * targetLocalRotation,
cameraSmoothness * Time.deltaTime);
}
}
uj5u.com熱心網友回復:
為此,您寧愿使用歐拉角,并且僅Quaternion在應用夾具后才將它們轉換為!
Quaternion除非您真的清楚自己在做什么,否則永遠不要直接接觸 a 的各個組件!一個Quaternion有4個部件x,y,z和w他們都在移動的范圍內-1,以1你嘗試過有啥意義不大;)
它可能是類似的東西
// Adjust via Inspector
public float minXRotation = 10;
public float maxXRotation = 90;
// Also adjust via Inspector
public Vector2 sensitivity = Vector2.one;
private float targetYRotation;
private float targetXRotation;
private void Update()
{
targetYRotation = Input.GetAxis("Mouse X")) * sensitivity.x;
targetXRotation -= Input.GetAxis("Mouse Y")) * sensitivity.y;
targetXRotation = Mathf.Clamp(targetXRotation, minXRotation, maxXRotation);
var targetRotation = Quaternion.Euler(Vector3.up * targetYRotation) * Quaternion.Euler(Vector3.right * targetXRotation);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, cameraSmoothness * Time.deltaTime);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329218.html
上一篇:當我處于播放模式時,DontDestroyOnLoad不斷呼叫并導致錯誤
下一篇:從層級視窗中移除游戲物件
