Как повернуть объект под определенным углом с определенным направлением и скоростью?

Я хочу повернуть объект на определенную степень, скорость и направление по оси 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 вместо движения по часовой стрелке он движется против часовой стрелки. Не уверен, что здесь происходит, нужна отчаянная помощь в этом.

Заранее спасибо.

1 ответ

Если я правильно понимаю, что вы пытаетесь сделать, то, возможно, что-то вроде этого будет работать:

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).
  • Я не проверял это, поэтому я не уверен, будет ли это работать так, как ожидалось.
Другие вопросы по тегам