[РЕШЕНО] UnityEvent с параметрами

Программирование на Юнити.

[РЕШЕНО] UnityEvent с параметрами

Сообщение Alex5 03 окт 2019, 15:22

Нашел скрипт на просторах сети.
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.Events;
using System.Collections;
using System.Collections.Generic;
using System;

public class EventManager : MonoBehaviour
{
        [Serializable]
        public class GameEvent : UnityEvent <string> {};        // Наше новое событие с параметром                  
        private static EventManager _eventManager;                                                             
        private Dictionary <string, GameEvent> _eventDictionary;                               

        public static EventManager instance
        {
                get {
                        if (!_eventManager)
                        {
                                _eventManager = FindObjectOfType (typeof (EventManager)) as EventManager;
                                if (!_eventManager)
                                         Debug.LogError ("There needs to be one active EventManger...");
                                else
                                        _eventManager.Init ();
                        }
                        return _eventManager;
                }
        }

        void Init ()
        {
                if (_eventDictionary == null)
                        _eventDictionary = new Dictionary<string, GameEvent>();
        }

        public static void StartListening (string eventName, UnityAction <string> listener)
        {
                GameEvent thisEvent = null;
                if (instance._eventDictionary.TryGetValue (eventName, out thisEvent))
                        thisEvent.AddListener (listener);
                else {
                        thisEvent = new GameEvent ();
                        thisEvent.AddListener (listener);
                        instance._eventDictionary.Add (eventName, thisEvent);
                }
        }
               
        public static void StopListening (string eventName,  UnityAction <string> listener)
        {
                if (_eventManager == null)
                        return;
                GameEvent thisEvent = null;
                if (instance._eventDictionary.TryGetValue (eventName, out thisEvent))
                        thisEvent.RemoveListener (listener);
        }

        public static void SendEvent (string eventName, string param = null)
        {
                GameEvent thisEvent = null;
                if (instance._eventDictionary.TryGetValue (eventName, out thisEvent))
                        thisEvent.Invoke (param);       // Вызов и передача параметра
        }
}


Подскажите, можно ли переделать param на какой либо другой тип данных? Например на Vector3
P.S. С c# только знакомлюсь
Последний раз редактировалось Alex5 03 окт 2019, 16:27, всего редактировалось 1 раз.
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

Re: UnityEvent с параметрами

Сообщение Alex5 03 окт 2019, 16:26

Нашел "продвинутый" вариант того же скрипта, того же автора http://mopsicus.ru/all/unity-event-manager-2-0/
Сам спросил - сам ответил. Как обычно :)
Linux это просто
Экономика это просто
Forex это просто
Мой канал на YouTube
Аватара пользователя
Alex5
Старожил
 
Сообщения: 507
Зарегистрирован: 22 авг 2019, 17:37

Re: [РЕШЕНО] UnityEvent с параметрами

Сообщение mopsicus 20 янв 2021, 00:12

Как автор обоих версий дополню :) Это рабочее решение конечно, но будет выделение памяти каждый раз на боксинг объектов, так что нужно учитывать. Посмотрите лучше в эту сторону: https://habr.com/ru/post/527418/
mopsicus
UNец
 
Сообщения: 11
Зарегистрирован: 08 фев 2016, 17:28
  • Сайт


Вернуться в Скрипты

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

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