Страница 1 из 1

Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 06:27
havismat
Здравствуйте,уважаемые участники форума, подскажите пожалуйста, каким методом лучше реализовать выделение рамкой? Тоесть:

На экране есть множество движущихся объектов, кликаю на один из них мышкой и он оказывается в квадратной/прямоугольной рамке( в зависимости от размеров и формы).

Пробовал вот так:
Синтаксис:
Используется javascript
rect = new Rect(screenPosition.x-100, Screen.height - screenPosition.y-75, width, 10);

        GUI.DrawTexture(rect, ramka, ScaleMode.ScaleAndCrop, false, 5);


Очевидно, что криво и не изящно, да и размеры почти у всех разные,подскажите пожалуйста, как это реализовать правильно?

Заранее благодарен, Михаил.

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 08:47
Order
Проще хранить размеры рамки в классе объекта(в скрипте который прикреплен к объекту)...

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 13:25
havismat
Спасибо большое, что-то сам не догадался. А саму рамку так и реализовывать через DrawTexture(), нет более удобных/подходящих для этого функций? :-\

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 13:56
Order
Попробуй ДравЛайн, не знаю что будет лучше выглядеть..

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 13:57
Zaicheg
Можно и мешем с подходящим материалом.

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 14:15
Neodrop
Функций море. Хоть GUI.Box к примеру.

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 21:23
havismat
Сейчас пойду копать как боксом сделать.
А как это делается мешем и в чем должна быть особенность материала?

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 22:36
Zaicheg
havismat писал(а):Сейчас пойду копать как боксом сделать.
А как это делается мешем и в чем должна быть особенность материала?

Он должен быть волшебным.
Не знаю, зависит от того, что нужно получить.
Я просто модель-кубик масштабирую с transparent/diffuse и по OnTrigger обрабатываю вошедшие объекты.

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 18 авг 2011, 23:09
defint
а если объект не на плоскости? нам мой взгляд выделение необходимо по другому делать, подсвечивание объекта или типа того.

Re: Выделение квадратной рамкой.

СообщениеДобавлено: 19 авг 2011, 10:57
BUDU_KRATOK
Имхо достаточно чего-то такого в OnGUI (RTS Generals на Unity3d.com форуме, там же можно найти примеры остальных скриптов):

Синтаксис:
Используется javascript
var width : int = mouseButton1UpPoint.x - mouseButton1DownPoint.x;
                var height : int = (Screen.height - mouseButton1UpPoint.y) - (Screen.height - mouseButton1DownPoint.y);
                var rect : Rect = Rect(mouseButton1DownPoint.x, Screen.height - mouseButton1DownPoint.y, width, height);
                GUI.DrawTexture (rect, selectionTexture, ScaleMode.StretchToFill, true);


Если RTS на плоскости - рейкасты из камеры в точку GetButtonDown и GetButtonUp, сравнивать что попало между хит.поинтами (на плоскость), не учитывая высоту. Юниты в каком-нибудь менеджере (опять же с того проекта, не моё):

Синтаксис:
Используется javascript
private var allUnitsList = new Array();
private var selectedUnitsList = new Array();


А если в объёме - имхо при GetButtonDown после проверки на то, что GetButtonDown!=GetButtonUp (исключить случайный клик) переводить видимые камере юнити в Camera.main.WorldToScreenPoint и проверять так же, но в плоскости камеры. По оптимизации не знаю :(

А если речь идёт о подсветке выбранного юнита масштабируемой рамкой, то тут надо от размеров объекта на экране смотреть и через GUI отрисовывать наверн, не смотрел в эту сторону...