Показать сообщение отдельно
Старый 14.04.2015, 20:38   #125
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

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

Переделал код таким образом:
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<
GameObjectUnitList = 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=0i<UnitList.Counti++) {
            
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);
    } 
код работает, подписчики исправно реагируют на событие, событие отвязано от объектов (в одном отдельном скрипте).
Теперь я правильно понял логику применения событий и делегатов? Хотя бы на базовом уровне?))
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием