Перемещение объекта с вращением

130
05 декабря 2019, 08:50

Как переместить объект с вращением из точки 10, 0, 0 в 30, 0, 0 и чтобы при перемещении объект крутился и когда он дошёл до точки то его rotation должен быть таким 0, 90, 0 я пробывал через такой код но значения у rotation другие

transform.position -= new Vector3(2, 0, 0);
transform.Rotate(Vector3.up * 250 * Time.deltaTime);
Answer 1

Из условия задачи абсолютно не ясно, какой из параметров задает все движение: время или скорость, если скорость, то чья именно, скорость вращения или перемещения?

Как ни крути, отталкиваться все равно придется от времени - его проще задать, а потом уже высчитывать конкретные скорости, чем наоборот. Использовал интерполяцию для вращения и для перемещения, хотя второе можно заменить обычным transform.position += скорость * Time.deltaTime.

Для, скажем, таких параметров:

Получаем такой результат:

public class MoveRotator : MonoBehaviour {
    public float timeToMove;
    public Vector3 targetPosition;
    public Vector3 targetRotation;
    void Start() {
        StartCoroutine(MoveRotate());
    }
    IEnumerator MoveRotate() {
        Vector3 startPosition = transform.position;
        Vector3 endPosition = targetPosition;
        Quaternion startRotation = transform.rotation;
        Quaternion endRotation = Quaternion.Euler(targetRotation.x, targetRotation.y, targetRotation.z);
        float timer = 0;
        while(timer < timeToMove) {
            float t = timer / timeToMove;
            transform.position = Vector3.Lerp(startPosition, endPosition, t);
            transform.rotation = Quaternion.Lerp(startRotation, endRotation, t);
            timer += Time.deltaTime;
            yield return null;
        }
    }
}

P.S.

Также стоит учитывать, что это пример в вакууме, и лично я бы не стал использовать для такого отдельный скрипт, такую корутину лучше запускать из другого класса или вообще использовать LeanTween, который к тому же бесплатный.

Answer 2

Думаю я знаю решение что поможет вам (я знаю их 2) Силами самого Unity и того что есть из коробки

public Transform target;
void Update (){
// для передвижения
    transform.position = 
        Vector3.Lerp(transform.position, target.position, Time.deltaTime * 2);
// для поворота
transform.rotation = 
        Quaternion.Lerp(transform.rotation , target.rotation , Time.deltaTime * 2);
}

Но советую присмотреться к такой штуке как DOTween

Видео туториал решения вашей задачи

Удачи)

READ ALSO
lightgallery dynamic. Добавление атрибута alt

lightgallery dynamic. Добавление атрибута alt

я генерирую lightgallery c помощью следующего динамического скриптаВсе работает как нужно

138
BitmapImage игнорирует StreamSource

BitmapImage игнорирует StreamSource

Я не совсем понимаю, почему когда устанавливаю StreamSource для BitmapImage, он всегда будет null

136
Как сделать таймер отсчета?

Как сделать таймер отсчета?

Нажимается кнопка в игре, происходит действие и начинается отсчет (допустим 10 секунд), bool становится falseПосле прохождения таймера в 10с, значение...

169
Отмена изменений объекта MVVM WPF EF6

Отмена изменений объекта MVVM WPF EF6

У меня есть проект для моего колледжаВ нем я пытаюсь реализовать MVVM + WPF + EF6

125