Обмен сообщениями/событиями в приложении

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

Обмен сообщениями/событиями в приложении

Сообщение broken 03 июн 2013, 16:37

Добрый день!

Хочу поинтересоваться опытом имеющихся девелоперов.

Кто какие способы для обработки (отправка/приём) событий использует в своих приложениях? Например, во flash базовый обмен событиями - AddEventListener и dispatchEvent.
Кто-нибудь использует готовые скрипты категории Messaging Systems из unity3d-wiki? : http://wiki.unity3d.com/index.php/Scripts/General
Messaging Systems

Advanced CSharp Messenger - Simple and efficient C# messaging system implemented with delegates and generics. Allows for logging of messages, has extended error detection, and adds extra protection from unexpected exceptions.
BooMessenger - An efficient and simple to use messaging platform. Allows hierarchial grouping of message types.
BroadcasterMessenger - Modified version of Messenger Extended.
CSharpEventManager - C# implementation of a messaging/notification system. Allows subscription to events without referencing their definitions.
CSharpMessenger - Another C# messaging/notification system implemented using delegates and generics.
CSharpMessenger Extended - C# messaging system using delegates and generics. Based on CSharpMessenger but has more error detection.
DelayedDelegates - An easy, central way to call function with a delay
DelayedMessage - A super simple way to send a message to an object after a number of seconds, and optionally repeat.
MessageRouter - subscription based messaging with delayed notification, delivery stages, message filtering, tagging, and receiver assertions
NotificationCenter - Register scripts to receive and post notifications. Handles messaging across scripts without references to each other. (See also NotificationCenterGenerics for a version that has stricter typing.)
CSharpNotificationCenter - C# implementation of the "NotificationCenter" script. Register scripts to receive and post notifications. Handles messaging across scripts without references to each other.


Либо отдаете предпочтение использованию собственных delegates (actions) от C# или SendMessage от Unity3d?

Спасибо!
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Обмен сообщениями/событиями в приложении

Сообщение Woolf 03 июн 2013, 16:55

Использую собственные делегаты с подпиской на нужные события.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Обмен сообщениями/событиями в приложении

Сообщение Neodrop 04 июн 2013, 04:00

Аналогично.
Слушатель подписывается на Событие. Когда Событие происходит, Обработчик События производит вызов всех Слушателей через методы, делегированные Слушателями в момент подписки на Событие.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обмен сообщениями/событиями в приложении

Сообщение broken 04 июн 2013, 08:07

То есть вы используете События? http://msdn.microsoft.com/ru-ru/library/awbftdfh.aspx:

Синтаксис:
Используется csharp
    public event EventHandler ThresholdReached;
 


Или делегаты в чистом виде? http://msdn.microsoft.com/ru-ru/library/ms173171.aspx:
Синтаксис:
Используется csharp
    public delegate int PerformCalculation(int x, int y);
 


Еще есть Action и Func, используете ли вы их?
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Обмен сообщениями/событиями в приложении

Сообщение Neodrop 04 июн 2013, 12:25

Я не использую Events - у них низкая производительность по сравнению с "чистыми" делегатами. И сложение делегатов тоже не использую (как минимум раньше, сложенные цепочки делегатов срабатывали так же медленно, как и Events), использую листы делегатов, хранящиеся в словарике по ключу События.
Во многих случаях, если скорость обработки и частота Событий не критична, вполне можно использовать и сложение делегатов и Events. То что я написал выше, не строгое правило, а привычка экономить каждую сотую долю миллисекунды.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обмен сообщениями/событиями в приложении

Сообщение broken 04 июн 2013, 15:23

Спасибо за ответы!
По поводу делегатов в словаре по ключу, нагуглил вот это: http://msdn.microsoft.com/en-us/library/z4ka55h8(v=vs.80).aspx, но тут опять же events.

Из unity3d-wiki вот скрипты которые используют так же словари делегатов. Вероятно, что-то схожее с вашим.
http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger
http://wiki.unity3d.com/index.php/BroadcasterMessenger
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Обмен сообщениями/событиями в приложении

Сообщение Robotron18 04 июн 2013, 18:31

А как насчет производительности делегатов? У меня мобильное приложение тяжелое по рендеру, борьба за каждый фпс. Использовал делегаты, т.к. без указателей вообще атас, и потерял 3-4 фпс. Возможно в другом месте копать надо, но нарыл такую вот инфу:
http://msdn.microsoft.com/en-us/library/ms973852.aspx

Кто что знает по этому поводу?
Robotron18
UNец
 
Сообщения: 40
Зарегистрирован: 25 июл 2010, 15:48

Re: Обмен сообщениями/событиями в приложении

Сообщение Neodrop 05 июн 2013, 15:02

Вызов делегата (с пустым методом, который ничего не делает) всего лишь на 3% медленнее прямого вызова этого же метода. По крайней мере так было год-два назад. Так что ваши потери FPS скорее всего в коде, выполняемом этими делегатами, а не в них самих.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обмен сообщениями/событиями в приложении

Сообщение Robotron18 05 июн 2013, 15:49

Уже нашли. Текстуры нового GUI имели слишком высокое разрешение. А про 3% есть референс?
Robotron18
UNец
 
Сообщения: 40
Зарегистрирован: 25 июл 2010, 15:48

Re: Обмен сообщениями/событиями в приложении

Сообщение Neodrop 06 июн 2013, 14:08

Просто прокрутите миллион раз прямой вызов и вызов делегата, да засеките время. Делов то на 5 минут.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Обмен сообщениями/событиями в приложении

Сообщение Макс 03 июл 2013, 12:58

Neodrop писал(а):использую листы делегатов, хранящиеся в словарике по ключу События.


Интересная тема... А можно примерчик такого рабочего паттерна, и его использования?
Макс
UNIверсал
 
Сообщения: 372
Зарегистрирован: 20 июн 2013, 23:05

Re: Обмен сообщениями/событиями в приложении

Сообщение temudjin 03 июл 2013, 13:22

Макс писал(а):
Neodrop писал(а):использую листы делегатов, хранящиеся в словарике по ключу События.


Интересная тема... А можно примерчик такого рабочего паттерна, и его использования?


Вот он ценз избирательный в группу закрытую. А если без шуток все же ясно сказано.
Синтаксис:
Используется csharp
Dictionary <string, List<Action/*любой другой делегат*/>> singals;


Если этого не достаточно, и нужные еще какие то паттерны и пояснения - то нужно учить мат.часть.
Аватара пользователя
temudjin
UNец
 
Сообщения: 15
Зарегистрирован: 17 ноя 2012, 01:48

Re: Обмен сообщениями/событиями в приложении

Сообщение Johnson 03 июл 2013, 13:30

Аналогично. Использую листы делегатов в словарях.
Я подозреваю, что все так делают, если разобрались с делегатами. Мессенджеры всегда и везде были медленной частью.
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ

Re: Обмен сообщениями/событиями в приложении

Сообщение Макс 03 июл 2013, 13:41

temudjin писал(а):
Макс писал(а):
Neodrop писал(а):использую листы делегатов, хранящиеся в словарике по ключу События.


Интересная тема... А можно примерчик такого рабочего паттерна, и его использования?


Вот он ценз избирательный в группу закрытую. А если без шуток все же ясно сказано.
Синтаксис:
Используется csharp
Dictionary <string, List<Action/*любой другой делегат*/>> singals;


Если этого не достаточно, и нужные еще какие то паттерны и пояснения - то нужно учить мат.часть.


Это занудство и дешовые понты!
думаешь, без тебя я таких "примеров" не понаходил в интернете?
Вот потому этот форум и загнивает, что прям никому вопрос уже задать нельзя, и получить вменяемый ответ.
Я более чем уверен, что это тебе нужно учиться. Еслиб ты хоть что-то мог и знал - тебе бы не составило труда, просто написать пример использования, а не твердить любимый штамп школьнегов-попугаев про мат часть.
Макс
UNIверсал
 
Сообщения: 372
Зарегистрирован: 20 июн 2013, 23:05

Re: Обмен сообщениями/событиями в приложении

Сообщение broken 03 июл 2013, 13:43

Johnson писал(а):Аналогично. Использую листы делегатов в словарях.
Я подозреваю, что все так делают, если разобрались с делегатами. Мессенджеры всегда и везде были медленной частью.


Имеете ввиду вот это?
http://msdn.microsoft.com/en-us/library/z4ka55h8(v=vs.80).aspx
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

След.

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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 10