【问题标题】:How are these events subscribed to in MonoBehaviour [duplicate]这些事件如何在 MonoBehaviour 中订阅 [重复]
【发布时间】:2018-01-30 02:09:29
【问题描述】:

我试图了解我在 MonoBehaviour 中遇到的令我困惑的事物的内部运作方式。

要定义一个事件,只需说出void EventName(),比如void Start() 或void MouseDown()

但是这个事件是如何注册到函数中的。它似乎不是由通常的事件处理程序

class.EventHandler += EventFunction()

您似乎也没有订阅观察者模式。就像 Start 和 OnMouseDown 被视为基于命名模式的构造函数。

那么这样的事件是如何实现的呢?

【问题讨论】:

  • Unity手册中有一篇文章:事件函数的执行顺序docs.unity3d.com/Manual/ExecutionOrder.html并没有真正描述它是如何在幕后实现的。基本上,简而言之,它只是在统一系统/子系统中注册的回调,并暴露给用户脚本。

标签: c# unity3d


【解决方案1】:

核心 Unity 引擎不是用 C# 编写的。它是用 C/C++ 代码编写的。这样,底层实现比用户在其上编写的 C# 脚本更快、更优化。

Unity 可以让您的托管脚本向本机内核提供指令。 Start、Awake、Update 等生命周期事件由此桥接过程专门处理。这就是为什么它们看起来与您习惯在 C# 中看到的事件处理程序不同的原因。

这个 Unity 开发 blog post 概述了脚本在现代版本的 Unity 中的工作原理

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2010-10-23
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多