Движение юнитов Warcraft III
Вопрос на тему "Как устроено передвижение юнитов в 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));
    }



Просмотров: 1 285

» Лучшие комментарии


quq_CCCP #1 - 3 года назад 0
Ну сначала пройдет проверка приказа, а может ли юнит его выполнить (способен ли он ходить), потом юнит будет разворачиваться на угол между юнитом и точкой куда был отдан приказ, после движок будет проверять проходимость местности в квадратных областях выстраивая из них кратчайший маршрут, а юнита двигая по этим областям с заданной скоростью.
Devion #2 - 3 года назад (отредактировано ) 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));
    }
Doc #3 - 3 года назад 0
awesomesk1ll #4 - 3 года назад 0
Devion:
Однако минимальный угол (угол между векторами - направление движения и текущий взгляд персонажа) влияет на скорость передвижения. Когда персонаж полностью отвернут от точки его скорость равна 0 (либо очень низкому значению), так как коэффициент поворота равен 0 (либо очень низкому значению). Когда персонаж повернут к точке его скорость полная. так как умножаемый коэффициент равен 1.
Таким образом персонаж и поворачивается и передвигается одновременно. Однако чем сильнее он повернут к указанной точке, тем ближе скорость к нормальной.
Вот об этом вопрос по сути, любопытно узнать как в варике реализовано).