Параметр передачи события объекта в сценарии Unity - PullRequest
0 голосов
/ 25 сентября 2018

не может передать параметр слушателю

[System.Serializable]
     public class EventGameObject : UnityEvent<GameObject> { }

[CreateAssetMenu]
     public class GameObjectEvent : ScriptableObject
     {
         private readonly List<GameObjectEventListener> eventListeners =
             new List<GameObjectEventListener>();

     public void Raise(GameObject go)
     {
         for (int i = eventListeners.Count - 1; i >= 0; i--)
             eventListeners[i].OnEventRaised(go);
     }

     public void RegisterListener(GameObjectEventListener listener)
     {
         if (!eventListeners.Contains(listener))
             eventListeners.Add(listener);
     }

     public void UnregisterListener(GameObjectEventListener listener)
     {
         if (eventListeners.Contains(listener))
             eventListeners.Remove(listener);
     }
 }

 public class GameObjectEventListener : MonoBehaviour
 {
     [Tooltip("Event to register with.")]
     public GameObjectEvent Event;

     [Tooltip("Response to invoke when Event is raised.")]
     public EventGameObject Response;

     private void OnEnable()
     {
         Event.RegisterListener(this);
     }

     private void OnDisable()
     {
         Event.UnregisterListener(this);
     }

     public void OnEventRaised(GameObject go)
     {
         Response.Invoke(go);
     }
 }
 >>>>gameObject X<<<<
 public class AIController : MonoBehaviour
 {
     public EventGameObject OnAIDeath;
     private void Start()
     {
     OnAIDeath.Invoke(gameObject);
     }
 }

 >>>>gameObject Y<<<<
 public class SceneMapController : MonoBehaviour
 {
     public void OnAIDeath(GameObject entityGO)
     {
         Debug.Log(entityGO);
     }
 }

GameObjectEventListener находится в игровом объекте SceneManager, когда я перетаскиваю событие Scriptableobject на слот события, которое я хочу использовать в качестве слушателя, сценарий SceneMapController и запускаю метод OnAiDeath с помощью игрового объектапараметр из AIController (который является сценарием для другого игрового объекта) invoke (gameObject) (проверьте изображение)

Краткое объяснение: когда gameObject X умирает со сценарием AIController, я хочу передать gameObject (который умер) слушателюиз gameObject Y и используйте gameObject, полученный в функции скрипта.

Что я делаю неправильно? Я получаю эту ошибку, пожалуйста, помогите Неподдерживаемый тип EventGameObject https://imgur.com/a/ZhIqiWG Большая часть кода отсюда: https://www.youtube.com/watch?v=raQ3iHhE_Kk&t=2325s

1 Ответ

0 голосов
/ 25 сентября 2018

вы пытаетесь подключить событие от редактора?если это так, будьте осторожны с выпадающим списком приемника.

difference between dynamic and static event binding

вы можете увидеть, что будут 'Dynamic bool' и 'Static Parameters', оба имеютваш приемник метод с тем же именем.если вы выберете верхний, параметр будет передан из вашего кода во время выполнения, но если вы выберете нижний, параметр всегда будет тем, который вы указали здесь: a static event binding with specified parameter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...