Как стать автором
Обновить

Комментарии 6

Как ни старался, ничего не понял. Ни какую задачу пытается решить автор, ни то, зачем нужна вся история с осями и четвертями. Vector3.RotateTowards() не подойдёт для этого?
Еще есть замечательный Vector3.Cross, благодаря которому можно получить вектор, который заставляет один вектор (например, transform.forward), стремиться выровняться с другим вектором, (например, Direction, который вычисляется вычитаением вектора позиции цели из вектора позиции игрока, либо локально, для текущей и текущей + 1 точками пути).
Не подойдет. Если отойти от математики, то в Lerp нужно два экземляра Vector3, один неизвестен, RotateTowards принимает 2 Vector3, один неизвестен.
Изначально цель — найти точку, грубо говоря второй Vector3, если цель известна, то смысл распаляться при уже готовых методах Unity?

Ну а Cross это вообще векторное произведение, я не знаю к чему оно здесь, но может так и надо.
Даже не поленился скачать проект. Так и не нашел применения там всей этой математике и бессмысленным IFам
Вся реализация огранчивается transform.Translate и transform.Rotate. эти два метода в две строчки кода — все что нужно для реализации поведения, которое я увидел в проекте.
Не берусь устверждать что в статье что-то не так, говорю лишь, что я вообще ничего не понял.
Так, на примере. Образовательная игра для детей для обучения алгоритмированию. Ребенок пишет объекту: «Повернись на 20 и пройди вперед на 50». Что значит вперед на 50? Translate задает направление движения, а не конечную точку. В проекте пишется транслятор для драйвера двигателя. Тут мой косяк, я не предусмотрел руководство юзеров, добавлю вечером.
Ну для робота как раз все равно, что значит вперед на 50. Подаете питание на двигатель и он еде в новом локальном «прямо». что значит вперед на 50? 50 это скорость на время, опять не понимаю к чему вся алгебра.
Но и в юнити то же самое. Если повенули трансформ, то и его «прямо» тоже повернулось.
Про конечную точку.
var targetPoint = transfrom.position + transform.forward * distance;

Вот вам и конечная точка.
осталость только лерпать:
var start = transform.position;
var end = targetPoint;
// а теперь в корутине
transform.position = Vector3.Lerp(start, end, time);
time += Time.deltaTime;

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории