Как обработать скролл в ScrollView?

Общие вопросы о Unity3D

Как обработать скролл в ScrollView?

Сообщение lucky 14 мар 2012, 22:49

Привет всем.

Тема частично заезженная, но окончательного и красивого решения я для себя не нашел.

Проблема в следующем: есть попап (Gui.Box в котором лежит ScrollView). Он поднимается над основной сценой. Когда скроллишь ScrollView вверх/вниз камера тоже вращается. Есть вариант отключать скрипт вращения камеры когда виден попап через component.enabled = false. Еще один вариант: если бы это был баттон можно было бы использовать event.Use() на клике.
Но как обработать скролл в ScrollView и сказать что-то на подобие event.Use()? чтобы произошел сам скроллинг и больше ничего.

Спасибо.
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21

Re: Как обработать скролл в ScrollView?

Сообщение yura415 14 мар 2012, 23:40

Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: Как обработать скролл в ScrollView?

Сообщение lucky 14 мар 2012, 23:55

yura415 писал(а):Эм.. Rect.Contains?


Но что это дает мне? Не совсем понимаю. Скажем, мышь находится над попапом, это легко определить, и что дальше?
Знает ли ГУИ о том что скроллится ScrollView? Порождается ли при этом какое-нибудь событие?
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21

Re: Как обработать скролл в ScrollView?

Сообщение yura415 15 мар 2012, 00:20

Порождается или не порождается - не знаю, но можете проверять на GetMouseButton и Rect.Contains
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: Как обработать скролл в ScrollView?

Сообщение lucky 15 мар 2012, 00:29

yura415 писал(а):Порождается или не порождается - не знаю, но можете проверять на GetMouseButton и Rect.Contains


сорри, я все же не совсем понимаю, допустим условие Rect.Contains. выполнилось? что делать в этом случае? как предотвратить вращение камеры? (disable скрипта не устраивает)
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21

Re: Как обработать скролл в ScrollView?

Сообщение yura415 15 мар 2012, 00:34

lucky писал(а):
yura415 писал(а):Порождается или не порождается - не знаю, но можете проверять на GetMouseButton и Rect.Contains


сорри, я все же не совсем понимаю, допустим условие Rect.Contains. выполнилось? что делать в этом случае? как предотвратить вращение камеры? (disable скрипта не устраивает)

И почему же не устраивает?))
По идее так:
Синтаксис:
Используется javascript
if(someRect.Contains(Event.current.mousePosition)){
    if(Input.GetMouseButton(0)){
        disableSomeScript();
    }
}
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: Как обработать скролл в ScrollView?

Сообщение lucky 15 мар 2012, 00:49

yura415 писал(а):
lucky писал(а):
yura415 писал(а):Порождается или не порождается - не знаю, но можете проверять на GetMouseButton и Rect.Contains


сорри, я все же не совсем понимаю, допустим условие Rect.Contains. выполнилось? что делать в этом случае? как предотвратить вращение камеры? (disable скрипта не устраивает)

И почему же не устраивает?))
По идее так:
Синтаксис:
Используется javascript
if(someRect.Contains(Event.current.mousePosition)){
    if(Input.GetMouseButton(0)){
        disableSomeScript();
    }
}



Не устраивает потому что:
предположим у меня есть куча разных попапов, которые могут быть открыты на множестве сцен. Тогда мне придется для каждого случая знать какой скрипт отключать (например в метод который открывает попап передавать typeof скрипта, и отрубать его) это нужно будет делать всегда, для любого попапа... А хотелось чтобы этим управлял один механизм, который бы например знал кто обрабатывает ивент мыши, и если это например скролл вью, то не давать его обрабатывать другим.
Не знаю как понятнее описать проблему.(
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21

Re: Как обработать скролл в ScrollView?

Сообщение Guyver 15 мар 2012, 07:38

делаем менеджер гуи ... в нём регаем все контролы, лей ауты и прочее ...

у контролов есть всякие события .. гдето в коде подписываемся на них ... заводим флажок глобальный .. например в менеджере под события ... при свершении события ставим флажок ... при новом круге отрисовки, снимаем флажок ...

камера перед тем как обработать мышку .. смотрит у менеджера ГУИ интересующие её флажки

п.с. могут быть не только скроллы но и клики, драги и тд и тп
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Как обработать скролл в ScrollView?

Сообщение lucky 15 мар 2012, 09:16

Guyver писал(а):делаем менеджер гуи ... в нём регаем все контролы, лей ауты и прочее ...

у контролов есть всякие события .. гдето в коде подписываемся на них ... заводим флажок глобальный .. например в менеджере под события ... при свершении события ставим флажок ... при новом круге отрисовки, снимаем флажок ...

камера перед тем как обработать мышку .. смотрит у менеджера ГУИ интересующие её флажки

п.с. могут быть не только скроллы но и клики, драги и тд и тп


А можно с этого момента поподробнее? Собственно у меня была похожая идея, но

"у контролов есть всякие события. гдето в коде подписываемся на них" - в этом то и проблема я не знаю какое событие происходит при скроллинге ScrollView? и как на него подписаться? расскажите пожалуйста об этом.

P.S. если был бы кусок работающего скрипта, было бы просто счастье
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21

Re: Как обработать скролл в ScrollView?

Сообщение Guyver 15 мар 2012, 13:57

на форуме в компонентах есть одна из версий моего ГУИ ..

там есть менеджер и несколько контролов .. все события у контролов я генерирую сам .. там по дереву от корня к листям бегу и смотрю кто щас будет хозяином события ... если у листа все дети не хотят обрабатывать событие .. то событие свершается у листа.

конкретно в выложенной версии нет события скролл .. но есть события вроде маусап, маусдаун, эентер/лив ... не сложно прикрутить ещё и скролл.

код может не самый папский, но для примера покатить должно.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Как обработать скролл в ScrollView?

Сообщение lucky 15 мар 2012, 22:09

Guyver писал(а):на форуме в компонентах есть одна из версий моего ГУИ ..

там есть менеджер и несколько контролов .. все события у контролов я генерирую сам .. там по дереву от корня к листям бегу и смотрю кто щас будет хозяином события ... если у листа все дети не хотят обрабатывать событие .. то событие свершается у листа.

конкретно в выложенной версии нет события скролл .. но есть события вроде маусап, маусдаун, эентер/лив ... не сложно прикрутить ещё и скролл.

код может не самый папский, но для примера покатить должно.


Спасибо большое, буду разбираться.
lucky
UNец
 
Сообщения: 9
Зарегистрирован: 14 мар 2012, 22:21


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13