理解这个自定义事件处理程序和unity3d

时间:2014-01-24 09:02:21

标签: events unity3d

我还是C#的新手我使用Unity3d。我想要了解事件,我一直在阅读它们并掌握它们的要点。我的朋友建议我统一使用这个事件处理程序

http://www.willrmiller.com/?p=87

但我真的不知道如何使用它,因为。

  1. 它们都不是来自MonoBehaviour,所以如果不是从Unity派生的话,我怎么能用按键或Unity条件触发事件呢?

  2. 在事件类SomethingHappenedEvent中,我甚至不知道那里会有什么参数,因为我对事件不熟悉。我的猜测将是一个条件,如果按下一个键或Unity发生了什么。但这可以追溯到1:它不是从MonoBehavior派生的,所以我不知道该怎么做。

  3. 总结一下这个事件系统是如何运行的,因为我目前所做的Unity3d需要一个脚本在GameObject上。

  4. 那么有人可以告诉我如何在Unity中使用它并更好地理解事件,尤其是在Unity3d中?

1 个答案:

答案 0 :(得分:2)

  

它们都不是来自单一行为,所以当它不是来自统一时,怎么能用按键或统一条件触发事件呢?

如帖子所述,您使用

Events.instance.Raise(new SomethingHappenedEvent());

也就是说,如果发生了某些事情(您的按键或某个条件)举起事件。你告诉经理发生了什么事情,它将负责告诉所有感兴趣的人(听众)。

从阅读你的问题开始,我认为这是你混淆的主要原因。此代码不会自动连接到任何事件。它的作用是为您提供一个框架来放置事件。您可以指定对象何时应该侦听哪些事件。然后,当发生他们可能感兴趣的事件时,框架将负责通知所有听众。你提出的事件。

这是有用的,因为您不必找到要通知的那些对象/实体/ GameObjects。您也不必使用广播消息或此类解决方案。

  

在事件类SomethingHappenedEvent中,我甚至不知道那里会有什么参数,因为我对事件不熟悉,我的猜测就是如果按下某个键或者发生了统一的事情就会出现这种情况。

无论你想要什么。您正在创建自己的活动。那么哪些信息与您自己的活动相关?它是一个HitEvent,你想知道哪个敌人被击中?然后存储敌人。是否存在重要位置的事件?然后存储位置。这取决于你。

  

总结一下这个事件系统是如何运行的,因为到目前为止我所做的unity3d要求脚本在游戏对象上。

这个课程依赖于singleton的概念。它有一个静态实例。只要您第一次拨打Events.instance.Raise(new SomethingHappenedEvent());,系统就会对其进行初始化。从你所谓的任何地方。这里的相关代码是

public static Events instance
{
    get
    {
        if (eventsInstance == null)
        {
            eventsInstance = new Events();
        }

        return eventsInstance;
    }
}

也就是说,当试图获取实例时,如果它尚未创建,则创建它然后返回它。如果它已经创建,那么只返回现有实例。没有要求将其作为组件并将其添加到GameObject。