|
2D/GUI Вопросы на тему 2D графики и интерфейсов |
25.03.2011, 18:31
|
#1
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Перетаскивание элементов GUI
Необходимо перетаскивать по экрану элементы GUI с помощью мыши, типа Drag and Drop. Нажали на элемент левой кнопкой мыши - удерживая левую кнопку мыши, перетаскиваем элемент - отпускаем левую кнопку мыши. Подскажите каким образом можно это реализовать.
И еще вопросик: Как отследить событие, когда щелкаем на определенный элемент GUI (на любой)?
|
(Offline)
|
|
25.03.2011, 18:53
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Перетаскивание элементов GUI
|
(Offline)
|
|
25.03.2011, 19:13
|
#3
|
Нуждающийся
Регистрация: 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
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Перетаскивание элементов GUI
Вот так не получается?
dpt.pos.x = dpt.pos.x + Event.current.delta.x; dpt.pos.y = dpt.pos.y + Event.current.delta.y;
|
(Offline)
|
|
25.03.2011, 19:34
|
#5
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Ответ: Перетаскивание элементов GUI
Спасибо!! Все получилось А что за такой параметр delta?
|
(Offline)
|
|
25.03.2011, 19:40
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Перетаскивание элементов GUI
на сколько мышь сместилась с прошлого эвента
|
(Offline)
|
|
25.03.2011, 20:06
|
#7
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Ответ: Перетаскивание элементов GUI
Хм, опять проблемка. Элемент GUI как бы не успевает двигаться за курсором. Нужно оочень медленно курсор двигать, чтобы элемент GUI передвигался.
|
(Offline)
|
|
26.03.2011, 10:19
|
#8
|
Нуждающийся
Регистрация: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Перетаскивание элементов GUI
Учитываются не локальные координаты элемента, и мышки. Возможно нужно отнять от позиции на которую двигаешь, координату окна, таким образом элемент будет двигаться с учётом локальных координат в окне. Если двигать нужно даже в локальных координатах контроллера ребёнком которого он является, то нужны тогда пере вычисления. Догадки.
|
(Offline)
|
|
26.03.2011, 15:48
|
#10
|
Unity/C# кодер
Регистрация: 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.x += Event.current.delta.x; pos.y += Event.current.delta.y; } }
}
|
(Offline)
|
|
26.03.2011, 19:07
|
#11
|
Нуждающийся
Регистрация: 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
|
Unity/C# кодер
Регистрация: 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.x += delta.x; pos.y += delta.y; _lastMousePos = mousePos; } } }
Кстати, какая версия Unity?
|
(Offline)
|
|
26.03.2011, 20:08
|
#13
|
Нуждающийся
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений (для 44 пользователей)
|
Ответ: Перетаскивание элементов GUI
Заработало походу! Спасибо) Версия 3.0.0f5
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:36.
|