Я обычно использую делегат для обратного вызова.Например, я объявляю делегата Action в менеджере в скрипте Unity и регистрирую делегат при вызове OnEnable и отписываюсь при вызове OnDisable в моем производном от Monobehaviuor скрипте.Но я знал, что может быть опасно, если я буду сопротивляться и сопротивляться в неподходящее время.Например, если объект удален кем-то.цель делегата будет нулевой.Тогда нежелательный делегат обратного вызова может быть.Поэтому я хочу проверить, что цель делегата равна нулю, когда делегат оправдан, и я хочу удалить его, и я хочу, чтобы делегат уникально сопротивлялся, когда тот же делегат вызывался в том же сценарии.Как я могу использовать это безопасно?Вот мой пример источника.
класс менеджера
public class TestManager : MonoBehaviour
{
public Action TestDelegate;
// Use this for initialization
void Update ()
{
if (Input.GetKeyDown("space"))
{
if(null != TestDelegate)
{
TestDelegate();
}
}
}
}
класс объекта
public class WindosTest : MonoBehaviour {
[SerializeField]
TestManager _manager;
private void Awake()
{
_manager.TestDelegate += Test;
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown("d"))
{
GameObject.DestroyImmediate(this.gameObject);
}
}
void Test()
{
UnityEngine.Debug.LogError("test");
}
}