Вопрос на тему "Как устроено передвижение юнитов в Warcraft 3"
Ситуация:
Имеется юнит (например, Пехотинец).
Вопрос:
Если отдать приказ идти в точку в 600 единицах позади пехотинца, как будет реализовано движение данного юнита?
Как долго он будет стоять на месте? Как и когда он будет разворачиваться, в нужном для передвижения, направлении?

Принятый ответ

Не помню за варкрафт, но я делал передвижение аналогичное доте 2, и, вроде как, они там совпадают.
Юнит поворачивается все время с одинаковой скоростью (скорость поворота). Если юнит отвернут, то он сразу начинает поворот, чтобы следовать в указанную точку.
Юнит начинает сразу следовать в указанную точку. Однако минимальный угол (угол между векторами - направление движения и текущий взгляд персонажа) влияет на скорость передвижения. Когда персонаж полностью отвернут от точки его скорость равна 0 (либо очень низкому значению), так как коэффициент поворота равен 0 (либо очень низкому значению). Когда персонаж повернут к точке его скорость полная. так как умножаемый коэффициент равен 1.
Таким образом персонаж и поворачивается и передвигается одновременно. Однако чем сильнее он повернут к указанной точке, тем ближе скорость к нормальной.
пригодится - функция минимального угла, возвращающего угол от 0 до PI
	public static float Angle(Vector2 from, Vector2 to)
    {
        return Acos(Clamp(Dot(from.normalized, to.normalized), -1f, 1f));
    }
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
8 лет назад
0
Ну сначала пройдет проверка приказа, а может ли юнит его выполнить (способен ли он ходить), потом юнит будет разворачиваться на угол между юнитом и точкой куда был отдан приказ, после движок будет проверять проходимость местности в квадратных областях выстраивая из них кратчайший маршрут, а юнита двигая по этим областям с заданной скоростью.
4
27
8 лет назад
Отредактирован Devion
4
Не помню за варкрафт, но я делал передвижение аналогичное доте 2, и, вроде как, они там совпадают.
Юнит поворачивается все время с одинаковой скоростью (скорость поворота). Если юнит отвернут, то он сразу начинает поворот, чтобы следовать в указанную точку.
Юнит начинает сразу следовать в указанную точку. Однако минимальный угол (угол между векторами - направление движения и текущий взгляд персонажа) влияет на скорость передвижения. Когда персонаж полностью отвернут от точки его скорость равна 0 (либо очень низкому значению), так как коэффициент поворота равен 0 (либо очень низкому значению). Когда персонаж повернут к точке его скорость полная. так как умножаемый коэффициент равен 1.
Таким образом персонаж и поворачивается и передвигается одновременно. Однако чем сильнее он повернут к указанной точке, тем ближе скорость к нормальной.
пригодится - функция минимального угла, возвращающего угол от 0 до PI
	public static float Angle(Vector2 from, Vector2 to)
    {
        return Acos(Clamp(Dot(from.normalized, to.normalized), -1f, 1f));
    }
Принятый ответ
0
29
8 лет назад
0
0
21
8 лет назад
0
Devion:
Однако минимальный угол (угол между векторами - направление движения и текущий взгляд персонажа) влияет на скорость передвижения. Когда персонаж полностью отвернут от точки его скорость равна 0 (либо очень низкому значению), так как коэффициент поворота равен 0 (либо очень низкому значению). Когда персонаж повернут к точке его скорость полная. так как умножаемый коэффициент равен 1.
Таким образом персонаж и поворачивается и передвигается одновременно. Однако чем сильнее он повернут к указанной точке, тем ближе скорость к нормальной.
Вот об этом вопрос по сути, любопытно узнать как в варике реализовано).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.