Глобальные события

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

Глобальные события

Сообщение PrefavEvolution 20 май 2014, 21:37

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

Синтаксис:
Используется csharp
using System;

public delegate void EventDelegate<TData>(Event<TData> data);
public struct Event<TData>
{
        public TData data;
}

static public class EventDispatcher<EventType>
{
        static public event Action<Event<EventType>> OnEvent;
        static public void Broadcast(EventType data)
        {
                if (OnEvent != null)
                        OnEvent(new Event<EventType> {data = data});
        }
}

static public class EventDispatcherExt
{
        static public void Broadcast<T>(this T data)
        {
                EventDispatcher<T>.Broadcast(data);
        }
}


ну и пример использования:

Синтаксис:
Используется csharp
public class Player
        {
                public struct OnPlayerDiedEvent
                {
                        public PlayerInfo player;
                }

                public Player()
                {
                        EventDispatcher<OnPlayerDiedEvent>.OnEvent += OnSomePlayerDied;
                }

                void OnSomePlayerDied (Event<OnPlayerDiedEvent> obj)
                {

                }

                public void OnDie()
                {
                        new OnPlayerDiedEvent() { player = this }.Broadcast();
                }
        }
 


В большенстве случаев помогает избавится от лишних зависимостей в коде. Пользуйтесь на здоровье)
Prefab Evolution - Nested Prefabs, Prefab Inheritance plugin.
Forum: http://unity3d.ru/distribution/viewtopic.php?f=17&t=23679
Free version: _https://www.assetstore.unity3d.com/en/#!/content/18054
PrefavEvolution
UNец
 
Сообщения: 40
Зарегистрирован: 27 мар 2014, 20:21

Re: Глобальные события

Сообщение KingPeas 21 май 2014, 05:40

Тоже вставала такая задача. Но памятуя о временах когда еще занимался Flash сделал нечто похожее и активно пользуюсь в своих проектах. Все никак не наберусь смелости оформить в виде плагина чтобы выложить в Asset. Я у себя добавил возможность задать приоритет вызова на событие, а также учитывать иерархию вызова в сцене Unity.
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ...
Мой первый плагин PropertyDrawerCollection
Аватара пользователя
KingPeas
UNIт
 
Сообщения: 78
Зарегистрирован: 12 сен 2012, 12:34
Откуда: Новосибирск
Skype: evgeniygurlev
  • Сайт
  • ICQ

Re: Глобальные события

Сообщение [bm] 09 июн 2014, 21:25

Спасибо! Как раз кстати!
Mafia Rush: universal iOS game _https://goo.gl/CKq4D Android _https://goo.gl/slFLXx
Shooter Ball: Android _https://goo.gl/21QyPw
skype: bmindfield
Аватара пользователя
[bm]
UNIверсал
 
Сообщения: 426
Зарегистрирован: 11 май 2010, 22:33
Откуда: Россия, Ижевск


Вернуться в Исходники (Копилка)

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

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