Quaternion.Lerp 函数给出错误;表达式断言失败:'!CompareApproximately(aScalar, 0.0F)'



我正在尝试制作一个系统,用户可以使用空格键逐渐将车辆转向90度,并且在按住空格键时车辆保持完全转向,但当输入停止时车辆逐渐返回到0度旋转。

当我把计时器变量逐渐上升和下降到一个Lerp函数,它只是给我的错误:断言失败的表达式:'!CompareApproximately (aScalar 0.0 f)的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour
{
private static float turnTimer = 2f;
private float turnTimeElapsed;
private float clampedTimeElapsed;
private float lerpTimer;
[SerializeField] private float turnSpeed;
Quaternion endRot;
Rigidbody ridgy;
private void Start()
{
ridgy = this.GetComponent<Rigidbody>();
turnTimeElapsed = 0f;
Quaternion endRot = Quaternion.Euler(0f, 90f, 0f);
}
private void Update()
{
if (Input.GetKey(KeyCode.Space) && turnTimeElapsed < turnTimer)
{
turnTimeElapsed += turnSpeed * Time.deltaTime;

}
else if (!Input.GetKey(KeyCode.Space) && turnTimeElapsed > 0)
{
turnTimeElapsed -= turnSpeed * Time.deltaTime;
}
clampedTimeElapsed = Mathf.Clamp(turnTimeElapsed, 0f, turnTimer);
lerpTimer = clampedTimeElapsed / turnTimer;
transform.rotation = Quaternion.Lerp(Quaternion.identity, endRot, lerpTimer);
}
}

你真的不需要在这里使用lerp,直接构造四元。

90 degrees—>90 * PI/180 * 0.5——比;PI/4[quats取半角,因此取0.5]

给定quat定义为:

xyz = sin(angle/2) * Axis
w = cos(angle/2)

并且您希望围绕y轴(0,1,0)进行旋转,因此只需直接构造四元数。

transform.rotation = new Quaternion(
0,
Mathf.Sin(lerpTimer * Mathf.PI/4.0),
0,
Mathf.Cos(lerpTimer * Mathf.PI/4.0)
);

相关内容

  • 没有找到相关文章

最新更新