Simple système d'événements dans l'Unité

Je suis en train d'utiliser le système d'événements de l'Unité (C#), mais j'ai de la difficulté à la mettre en œuvre.

La plupart des exemples, une classe, qui permet de définir le gestionnaire d'; ensuite, vous écrivez dans la même classe, la fonction qui correspond à la signature du gestionnaire, et vous écrivez les événements comme statique

public class EventExample : MonoBehaviour
{
    public delegate void ExampleEventHandler();
    public static event ExampleEventHandler OneDayPassed;

    public static void NextTurn()
    {
        //do stuff then send event
        if (OneDayPassed != null)
            OneDayPassed();
    }
}

Puis dans une autre classe, vous vous abonnez à des événements, créer une fonction qui va réellement faire quelque chose

public class EntityWatcher: MonoBehaviour
{
    void Start()
    {
        EventExample.OneDayPassed += this.PrepareNextDay;
    }

    public void PrepareNextDay()
    {
        //Do other stuff that happen after the day is done

    }
}

Jusqu'à présent pas de problèmes, mais je ne suis pas sûr de savoir comment puis-je concevoir ce, de sorte que toute GameObject d'un type particulier, allez vous abonner à cet événement. Par exemple, si vous avez une catégorie de personnel de GO, qui travaille de 8 à 6, et vous instancier lors de l'exécution; dois-je m'inscrire dans la classe principale de cette catégorie, ou devrais-je créer un script que j'attache de l'Objet Jeu de la préfabrication, qui vous inscrire à l'événement?

L'objectif est que tous les membres du personnel qui doit faire 8 à 6 maj au centre de sport, à savoir lors de la "journée de l'événement" le feu, mais je ne veux pas de vous abonner chaque prefab que j'instancie.

À partir de ma compréhension, je dois joindre un script avec le besoin de code sur le prefab, mais je ne peux pas trouver un exemple pratique qui montrent si cela est en fait la façon de le faire.

Salut Newb z. Tout ceci est totalement et complètement faux. Ces jours syou suffit d'utiliser UnityEvent. Vous n'utilisez pas et réalisme ne peut pas utiliser le "old fashioned" les événements d'il y a dix ans.
Donc, il est préférable de s'appuyer sur quelque chose utilisé uniquement dans l'Unité, Vs quelque chose qui fait partie de la langue elle-même?
Salut @newbiez. Oui, c'est absolument correct.
Vous devez comprendre que quand vous utilisez l'Unité, vous êtes à l'aide d'un distorsion extrême de la programmation classique. Il n'est pas un OO système, c'est de l'ECS. Considérer cette récente question de moi-même, stackoverflow.com/questions/36251078/... l'unité a ces "interfaces" qui sont en réalité complètement détraqué et à l'opposé de "l'interface" en c#.

OriginalL'auteur | 2016-03-27