Какой элемент нужно рассмотреть чтобы мышкой можно было рисовать прямоугольные

области по экрану? Думаю как реализовать прямоугольное выделение объектов на сцене, подскажите пожалуйста

3 ответов

40 просмотров

Исправил Сам не делал, но вот в теории - делаем виджет с нужной нам рамкой размером 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

Blackcoat+- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта