如何以特定方向和速度旋转物体特定角度?

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

我想将物体沿 Z 轴旋转某个特定的角度、速度和方向,然后停止。

这是我的代码:

Quaternion targetRotation = Quaternion.AngleAxis(currentRotation.rotateValue, Vector3.forward);
float step = currentRotation.speed;
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, step);

这样,我可以以所需的速度和角度移动,但方向不正确。我所做的是将其移动 180,在达到 180 后,我将其移动 360,这是一个循环。问题是,360 度旋转后不再是顺时针移动,而是逆时针移动。不知道这里发生了什么,需要绝望的帮助。

提前致谢。

c# unity-game-engine rotation
1个回答
0
投票

如果我正确理解你想要做什么,那么也许这样的事情会起作用:

private float anglesToRotate;
private Quaternion targetRotation, initialRotation;
private float elapsedTime, duration, speed;

void Start()
{
    time = 0.0f;
    duration= 0.0f;
}

void Update()
{
    if (time < duration)
    {
        time += Time.deltaTime;
        transform.rotation = Quaternion.Lerp(
                                  initialRotation,
                                  targetRotation,
                                  (speed * time) / duration);
    }
}

public void Rotate(float angles, float speed, float duration)
{
     initialRotation = transform.rotation;
     targetRotation = Quaternion.Euler(
                         transform.rotation.x,
                         transform.rotation.y,
                         transform.rotation.z + anglesToRotate);
     time = 0.0f;
}

注意事项:

  • 使用正角度向一个方向旋转,使用负角度向相反方向旋转(如果角度为 180 则符号无关紧要)。
  • 调整速度和持续时间的值,使旋转更快或更慢。 (我必须添加持续时间才能使其与
    Quaternion.Lerp
    一起工作)。
  • 我还没有测试过这个,所以我不确定它是否会按预期工作。
© www.soinside.com 2019 - 2024. All rights reserved.