области по экрану? Думаю как реализовать прямоугольное выделение объектов на сцене, подскажите пожалуйста
Исправил Сам не делал, но вот в теории - делаем виджет с нужной нам рамкой размером 100*100. У всех виджетов насколько мне известно, bounds всегда прямоугольник. Также если этот виджет спавнится прямо во viewport, то его точкой 0.0 будет левый верхний угол. При клике выводишь этот виджет на экран и ставишь ему set size на его size/100, set position от get mouse position on viewport. В тике этого виджета прибавляем к его set size значение от (get input mouse delta x и y / 100) соответственно. Таким образом мы получили сам виджет выделения. Теперь нам нужно спроецировать его в игру. Для этого нам нужен актор с box collision, для него нужно найти location, rotation и bounds extent. Rotation ставим от world rotation камеры. Чтобы найти центр нашего выделения, нужно вычесть/прибавить (в зависимости от направления выделения относительно изначальной точки клика) из position виджета его absolutesize/2. Из этой точки через convert screen location to world space получаем location для куба. Bounds extend куба - та ось, что является forward вектором (х или y не помню) - ее делаем максимально длинной, чтобы цепляла на любом расстоянии от камеры). Боковая ось - зная центр виджета на вьюпорте, находим центральную точку на боковом ребре виджета, прибавляя к центру виджета его absolute size.x/2. Полученную точку также convert to world space. Теперь находим distance между центром куба и полученной точкой в 3д пространстве. Эта дистанция - наш bound extend боковой оси. Ось z куба - то же самое, но берем y виджета. После применения этих значений вызываем проверку на оверлап. Чтобы не оверлапить то, чего в кадре нет, можно использовать вшитую в актор булевую wasrecentlyrendered. Повторюсь, сам не делал, все в теории. Возможно, можно как то проще.
Либо вот урок https://youtu.be/-09V8Aq8SX4?si=LNRjJB8Tz7TJj3Zx
Спасибо! То что надо 👍👍👍🙂
Обсуждают сегодня