0
Quaternion.Lerp()
应该可以很好地满足您的需求。但是,对它的使用为该方法提供了一些不正确的参数,这就是为什么它无法按预期工作的原因。(此外,您可能不应该使用其构造函数来构造四元数,有一些辅助方法可以正确地从欧拉角进行转换。)
您需要做的是记录初始的开始和结束旋转,并在Quaternion.Lerp()每次调用时将它们传递给它。
请注意,您不能仅参考transform.rotation每一帧,因为它会随着对象旋转而变化。例如,调整代码以使其工作:
Quaternion startRotation;
Quaternion endRotation;float rotationProgress = -1;
// Call this to start the rotationvoid StartRotating(float zPosition){
// Here we cache the starting and target rotations
startRotation = transform.rotation;
endRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, zPosition);
// This starts the rotation, but you can use a boolean flag if it's clearer for you
rotationProgress = 0;
}
void Update() {
if (rotationProgress < 1 && rotationProgress >= 0){
rotationProgress += Time.deltaTime * 5;
// Here we assign the interpolated rotation to transform.rotation
// It will range from startRotation (rotationProgress == 0) to endRotation (rotationProgress >= 1)
transform.rotation = Quaternion.Lerp(startRotation, endRotation, rotationProgress);
}
}
收藏