将一个整数添加到相机的旋转超过 360 度
Adding an integer to the rotation of a camera past 360 degrees
我在这里做的是在按键时一次将相机旋转 90 度,使用
currentpos = transform.eulerAngles + new Vector3 (0, 90, 0);
和
transform.eulerAngles = Vector3.Lerp (transform.eulerAngles, currentpos, Time.deltaTime * speed);
问题是当相机达到 360 度时,它想尝试将角度更改为 450,因此陷入无限旋转循环。
我必须使用欧拉角,因为相机角度为 45 度,欧拉角是全局旋转而不是局部旋转
我的问题是如何让它停止无限循环并从 360 度转到 90 度以及不向相反方向旋转例如我试过
if (transform.eulerAngles.y == 360){
currentpos = transform.eulerAngles + new Vector3 (0, 0, 0);
}
然而 Vector3.Lerp
然后以相反的方向旋转回到 0,而不是通过 360 度到达 0。
我建议使用 Mathf.LerpAngle()
无论您设置的角度大于 360(例如 360 + x)还是仅设置角度 x,它都会按照您的预期进行插值,而不会尝试朝相反的方向拍摄。
希望对您有所帮助!
编辑:
正如@JoeBlow 在上面的评论中提到的,我还建议使用任意一种 Rotate 方法(在变换和四元数上),而不是直接设置目标值。在大多数情况下,它会确保平滑旋转,无论您想要它快或慢。
我在这里做的是在按键时一次将相机旋转 90 度,使用
currentpos = transform.eulerAngles + new Vector3 (0, 90, 0);
和
transform.eulerAngles = Vector3.Lerp (transform.eulerAngles, currentpos, Time.deltaTime * speed);
问题是当相机达到 360 度时,它想尝试将角度更改为 450,因此陷入无限旋转循环。 我必须使用欧拉角,因为相机角度为 45 度,欧拉角是全局旋转而不是局部旋转
我的问题是如何让它停止无限循环并从 360 度转到 90 度以及不向相反方向旋转例如我试过
if (transform.eulerAngles.y == 360){
currentpos = transform.eulerAngles + new Vector3 (0, 0, 0);
}
然而 Vector3.Lerp
然后以相反的方向旋转回到 0,而不是通过 360 度到达 0。
我建议使用 Mathf.LerpAngle()
无论您设置的角度大于 360(例如 360 + x)还是仅设置角度 x,它都会按照您的预期进行插值,而不会尝试朝相反的方向拍摄。
希望对您有所帮助!
编辑: 正如@JoeBlow 在上面的评论中提到的,我还建议使用任意一种 Rotate 方法(在变换和四元数上),而不是直接设置目标值。在大多数情况下,它会确保平滑旋转,无论您想要它快或慢。