我想用一个程序来使用lerp功能,到目前为止,我已经做到了一部分。角色将转动他们的位置以面对目标对象。然而,我想让角色从他们自己的位置开始旋转,而目前发生的情况是他们的旋转被设置为一些抽象的值,比如X=0,然后它将从那里开始旋转他们。
我想做的是简单地将角色平稳地转向另一个变换。下面是代码。
public IEnumerator LookSlerpAt(Transform target, int seconds)
{
IsTurningHead = true;
Vector3 relativePos = target.position - this.transform.position;
Quaternion lookRotation = Quaternion.LookRotation(relativePos);
float elapsedTime = 0f;
float fraction = elapsedTime / seconds;
while (elapsedTime <= seconds)
{
this.transform.rotation = Quaternion.Lerp(target.rotation, lookRotation, fraction);
print($"rotation:{this.transform.rotation}");
elapsedTime += Time.deltaTime;
fraction = elapsedTime / seconds;
yield return Time.deltaTime;
}
IsTurningHead = false;
}
谢谢你的时间
如果你想平滑地旋转到方向,你可以使用它作为coroutine。你指定旋转的时间,然后自动调整速度。
public IEnumerator RotateToDirection(Transform transform, Vector3 positionToLook, float timeToRotate)
{
var startRotation = transform.rotation;
var direction = positionToLook - transform.position;
var finalRotation = Quaternion.LookRotation(direction);
var t = 0f;
while (t <= 1f)
{
t += Time.deltaTime / timeToRotate;
transform.rotation = Quaternion.Lerp(startRotation, finalRotation, t);
yield return null;
}
transform.rotation = finalRotation;
}