在coroutine中使用lerp面对其他对象。

问题描述 投票:0回答:1

我想用一个程序来使用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;
    }

谢谢你的时间

unity3d
1个回答
1
投票

如果你想平滑地旋转到方向,你可以使用它作为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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.