Привет! У меня такая задача: нужно обнаружить деревья, стоящие на пути вдоль линии. Делаю скилл в виде луча, который будет сталкиваться с первым попавшимся на пути деревом. Вернее сказать даже с первым вообще попавшимся энтитем. Сначала хотел заюзать TraceLine или TraceHull, которые вроде хорошо подходят под задачу, но похоже, что они игнорируют деревья. Другим вариантом может быть использование чего-то вроде
или лучше сразу
чтоб найти вообще всех на пути.
Однако почему-то эта функция безразлична к деревьям даже при флаге DOTA_UNIT_TARGET_TREE. Пробовал выкрутить радиус в 1000, но один результат отрицательный.
На крайняк остаётся делать GetAllTreesAroundPoint в цикле, смещая центр каждый раз по ходу луча, но мне кажется, это будет слишком затратная операция, потому что просчёт луча должен происходить по несколько десятков раз в секунду, да ещё и помножить это на то, что несколько игроков могут одновременно выпускать лучи. Вообще не пробовал этот вариант, может, GetAllTreesAroundPoint достаточно оптимизирован, чтоб не просаживать фпс даже при таком количестве вызовов в секунду, но что-то сомневаюсь я.
В общем, в основном вопрос таков: как заставить FindUnitsInLine принимать флаг DOTA_UNIT_TARGET_TREE и соответственно видеть деревья? Ну или вообще как можно обнаруживать деревья, попадающиеся на определённой линии на карте? Где найти эдакую GetAllTreesAlongLine по аналогии с существующей GetAllTreesAroundPoint?
Код:
local trees = FindUnitsInLine(DOTA_TEAM_NOTEAM, startPos, endPos, nil, 30, DOTA_UNIT_TARGET_TEAM_BOTH, DOTA_UNIT_TARGET_TREE, DOTA_UNIT_TARGET_FLAG_NONE)
Код:
local entities = FindUnitsInLine(DOTA_TEAM_NOTEAM, startPos, endPos, nil, 30, DOTA_UNIT_TARGET_TEAM_BOTH, DOTA_UNIT_TARGET_ALL + DOTA_UNIT_TARGET_TREE, DOTA_UNIT_TARGET_FLAG_NONE)
Однако почему-то эта функция безразлична к деревьям даже при флаге DOTA_UNIT_TARGET_TREE. Пробовал выкрутить радиус в 1000, но один результат отрицательный.
На крайняк остаётся делать GetAllTreesAroundPoint в цикле, смещая центр каждый раз по ходу луча, но мне кажется, это будет слишком затратная операция, потому что просчёт луча должен происходить по несколько десятков раз в секунду, да ещё и помножить это на то, что несколько игроков могут одновременно выпускать лучи. Вообще не пробовал этот вариант, может, GetAllTreesAroundPoint достаточно оптимизирован, чтоб не просаживать фпс даже при таком количестве вызовов в секунду, но что-то сомневаюсь я.
В общем, в основном вопрос таков: как заставить FindUnitsInLine принимать флаг DOTA_UNIT_TARGET_TREE и соответственно видеть деревья? Ну или вообще как можно обнаруживать деревья, попадающиеся на определённой линии на карте? Где найти эдакую GetAllTreesAlongLine по аналогии с существующей GetAllTreesAroundPoint?