我有这个代码,但我一直无法找到一个体面的解决方案,以钳之间的2个Angular 值的X轴。它将如何在这种情况下完成?
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);
}
}
2条答案
按热度按时间igetnqfo1#
为此,您宁愿使用欧拉角,并仅在应用夹具后将其转换为
Quaternion
!永远不要直接触摸
Quaternion
的单个组件,除非你真的知道你在做什么!Quaternion
有四个组件x
,y
,z
和w
,它们都在-1
到1
的范围内移动,所以你的尝试没有什么意义;)可能是这样的。
c90pui9n2#
你需要像这样夹住鼠标Y + transform.rotation.x