Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Алгоритм
Версия Warcraft:
1.31+
Функция позволяет перемещать юнита без дёрганья, при перемещении идет скольжение вдоль непроходимых участков.
	---@param source unit
	---@param x real
	---@param y real
	function SetUnitPositionSmooth(source, x, y)
		local last_x = GetUnitX(source)
		local last_y = GetUnitY(source)
		local bx
		local by

		SetUnitPosition(source, x, y)

		if (RAbsBJ(GetUnitX(source) - x) > 0.5) or (RAbsBJ(GetUnitY(source) - y) > 0.5) then

			SetUnitPosition(source, x, last_y)
			bx = RAbsBJ(GetUnitX(source) - x) <= 0.5
			SetUnitPosition(source, last_x, y)
			by = RAbsBJ(GetUnitY(source) - y) <= 0.5

			if bx then
				SetUnitPosition(source, x, last_y)
			elseif by then
				SetUnitPosition(source, last_x, y)
			else
				SetUnitPosition(source, last_x, last_y)
			end

		end
	end
jass версия
function SetUnitPositionSmooth takes unit source, real x, real y returns nothing
    local real last_x = GetUnitX(source)
    local real last_y = GetUnitY(source)
    local boolean bx
    local boolean by

    call SetUnitPosition(source, x, y)

    if (RAbsBJ(GetUnitX(source) - x) > 0.5) or (RAbsBJ(GetUnitY(source) - y) > 0.5) then
        
        call SetUnitPosition(source, x, last_y)
        set bx = RAbsBJ(GetUnitX(source) - x) <= 0.5
        call SetUnitPosition(source, last_x, y)
        set by = RAbsBJ(GetUnitY(source) - y) <= 0.5
        
        if bx then
            call SetUnitPosition(source, x, last_y)
        elseif by then
            call SetUnitPosition(source, last_x, y)
        else
            call SetUnitPosition(source, last_x, last_y)
        endif

    endif
endfunction
пример работы можно увидеть тут, примерно с минуты видео
`
ОЖИДАНИЕ РЕКЛАМЫ...
29
Неплохо бы карту пример, а то непонятно как её использовать.
29
Hate:
вместо обычного SetUnitPosition
Вместо обычного плавность никто не заметить.
26
NazarPunk:
Hate:
вместо обычного SetUnitPosition
Вместо обычного плавность никто не заметить.
ты серьезно щас? хоть когда нибудь перемещение делал как в рпг?
29
ты серьезно щас? хоть когда нибудь перемещение делал как в рпг?
Делал, на мемхаке двигал невидимого юнита, за курсором, за которым бежал основной юнит. Вообще без проблем.
26
ну вот попробуй обычного юнита двигать через клавиши через сет позишн. увидишь очень много интересного
23
все верно! Даже 2D обьект чекает позиции рядом с столкновении и делает гладкую сглаживание. Иначе дергание. Суть математическая формула с колайдеров
32
SetUnitPosition и так не дает запихать в непроходимое место или за границы карты, он и так скользит если коллижены не выключены.
26
quq_CCCP:
SetUnitPosition и так не дает запихать в непроходимое место или за границы карты, он и так скользит если коллижены не выключены.
ты не прав
33
Забрал себе, реально очень помогло, персонаж стал скользить вдоль стены
33
rsfghd, Можешь добавить Jass версию, если не сложно, мб кому пригодится
Спустя 2 года скажу, что использовал эту штуковину уже в 5 проектах, работает как часы
18
Да, хорошая наработка, да а что тут переносить, 1 функция и 2 ифа
28
Bergi_Bear, куда мне её добавить? xD
в комменты максимум, хотя тут и без джасса предельно всё понятно
33
rsfghd, у тебя под есть права на редактирование, сделай под катом
Jass версия
//тут код
Чтобы оставить комментарий, пожалуйста, войдите на сайт.