мне важно понимать как они работают, так как логически в голове алгоритмы под них выстраиваются. Я осознаю что мое понимание делегатов и событий весьма поверхностно.
Переделал код таким образом:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public delegate void On_SelectUnit_Event();
public class Delegate_for_Event : MonoBehaviour {
public int i;
public List<GameObject> UnitList = new List<GameObject>(); // список юнитов
public MoveGamer UnitDelegate;
public event On_SelectUnit_Event Event_Select_Unit;
void Awake() {
UnitList.AddRange(GameObject.FindGameObjectsWithTag("Unit Player"));
for (int i=0; i<UnitList.Count; i++) {
UnitDelegate = UnitList[i].GetComponent<MoveGamer>();
Event_Select_Unit += UnitDelegate.Deselect_If_Not_Active;
}
}
public void Event_Select_Unit_Start() {
Event_Select_Unit();
}
}
Объявлен делегат, создано событие, осуществлена подписка объектов на него.
В этом коде (другой скрипт) осуществляется вызов события:
public void OnMouseDown() {
if (Mark_Unit) {
Event_Aggregator.Event_Select_Unit_Start();
}
}
public void Deselect_If_Not_Active () {
Debug.Log(this.name);
}
код работает, подписчики исправно реагируют на событие, событие отвязано от объектов (в одном отдельном скрипте).
Теперь я правильно понял логику применения событий и делегатов? Хотя бы на базовом уровне?))