Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > 2D/GUI

2D/GUI Вопросы на тему 2D графики и интерфейсов

Ответ
 
Опции темы
Старый 25.03.2011, 18:31   #1
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Перетаскивание элементов GUI

Необходимо перетаскивать по экрану элементы GUI с помощью мыши, типа Drag and Drop. Нажали на элемент левой кнопкой мыши - удерживая левую кнопку мыши, перетаскиваем элемент - отпускаем левую кнопку мыши. Подскажите каким образом можно это реализовать.
И еще вопросик: Как отследить событие, когда щелкаем на определенный элемент GUI (на любой)?
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 18:53   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перетаскивание элементов GUI

Сегодня отвечал на похожий вопрос: http://forum.boolean.name/showpost.p...&postcount=381
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 19:13   #3
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

Я такой код написал:
EventType cur = Event.current.type;
if(cur == EventType.MouseDrag){
      if(dpt.pos.Contains(Event.current.mousePosition))
	  //Реализовать перетаскивание элемента GUI
}
А как перетаскивание реализовать? Можно пример кода?
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 19:22   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перетаскивание элементов GUI

Вот так не получается?
dpt.pos.dpt.pos.Event.current.delta.x;
dpt.pos.dpt.pos.Event.current.delta.y
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 19:34   #5
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

Спасибо!! Все получилось А что за такой параметр delta?
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 19:40   #6
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перетаскивание элементов GUI

на сколько мышь сместилась с прошлого эвента
(Offline)
 
Ответить с цитированием
Старый 25.03.2011, 20:06   #7
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

Хм, опять проблемка. Элемент GUI как бы не успевает двигаться за курсором. Нужно оочень медленно курсор двигать, чтобы элемент GUI передвигался.
(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 10:19   #8
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

В общем написал такую функцию:
protected void Drag(){
	EventType cur = Event.current.type;
		if(cur == EventType.MouseDrag){
			if(flag){
				if(pos.Contains(Event.current.mousePosition)){
					pos.x = pos.x + Event.current.delta.x;
					pos.y = pos.y + Event.current.delta.y;
					flag = false;
				}
			} else if(new Rect(pos.x-200, 
pos.y-200,pos.width+400,pos.height+400).Contains(Event.current.mousePosition)){
			              pos.x = pos.x + Event.current.delta.x;
					pos.y = pos.y + Event.current.delta.y;
			}
		} 
		if(cur == EventType.MouseUp){
			if(pos.Contains(Event.current.mousePosition))
				flag = true;
		}
		
	}
Все работает, НО только когда запускаешь в Юнити. А когда из билда, при нажатии на панельку, она просто в сторону уезжает. Почему вообще билд и проект, запущенный в Юнити, ведут себя неодинаково?
(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 15:28   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Перетаскивание элементов GUI

Учитываются не локальные координаты элемента, и мышки. Возможно нужно отнять от позиции на которую двигаешь, координату окна, таким образом элемент будет двигаться с учётом локальных координат в окне. Если двигать нужно даже в локальных координатах контроллера ребёнком которого он является, то нужны тогда пере вычисления. Догадки.
(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 15:48   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перетаскивание элементов GUI

Что-то у всех мания сложности изобретать))

using UnityEngine;

public class 
DragTest MonoBehaviour
{

    public 
Rect pos = new Rect(20,20,200,200);

    private 
bool _drag false;

    public 
void OnGUI()
    {
        
GUI.Box(pos"Тащи меня");

        var 
evtType Event.current.type;
        var 
mousePos Event.current.mousePosition;

        if (
evtType == EventType.MouseDown && pos.Contains(mousePos))
        {
            
_drag true;
        }
        else if (
evtType == EventType.MouseUp && pos.Contains(mousePos))
        {
            
_drag false;
        }
        else if (
evtType == EventType.MouseDrag && _drag)
        {
            
pos.+= Event.current.delta.x;
            
pos.+= Event.current.delta.y;
        }
    }



(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 19:07   #11
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

Pax, проблема осталась. Запускаю из Юнити - все норм, а из билда(в броузере) - не работает. Пытаюсь вот сделать так, как Мока посоветовал.
Решил отследить значения Event.current.delta.x и Event.current.delta.y, выводя их в Label при попытке передвижения окошка по экрану. Такие значения(соответственно, delta.x и delta.y):211 88, 535 267, 1091 532. По идее значения должны быть маленькими..
Я вообще понять не могу, какая разница запускать проект в Юнити или из билда.
(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 19:53   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Перетаскивание элементов GUI

Похоже на багу Unity. Тогда такой костыль:

using UnityEngine;

public class 
DragTest MonoBehaviour
{
    public 
Rect pos = new Rect(20,20,200,200);
 
    private 
bool _drag false;

    private 
Vector2 _lastMousePos;

    public 
void OnGUI()
    {
        
GUI.Box(pos"Тащи меня");
 
        var 
evtType Event.current.type;
        var 
mousePos Event.current.mousePosition;
 
        if (
evtType == EventType.MouseDown && pos.Contains(mousePos))
        {
            
_drag true;
            
_lastMousePos mousePos;
        }
        else if (
evtType == EventType.MouseUp && pos.Contains(mousePos))
        {
            
_drag false;
        }
        else if (
evtType == EventType.MouseDrag && _drag)
        {
            var 
delta mousePos _lastMousePos;
            
pos.+= delta.x;
            
pos.+= delta.y;
            
_lastMousePos mousePos;
        }
    }
 
 


Кстати, какая версия Unity?
(Offline)
 
Ответить с цитированием
Старый 26.03.2011, 20:08   #13
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Перетаскивание элементов GUI

Заработало походу! Спасибо) Версия 3.0.0f5
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com