Unity C# 中像 Start() 这样的通用函数

问题描述 投票:0回答:1

我正在创建一个团结的多人游戏系统,针对那些不想用网络搞乱任何事情的人。

为了简化它,我想创建通用函数(由于缺乏更好的名称),例如 Start() 或 Update() ,它们可以由另一个脚本调用,而无需引用父脚本。

我可以使用Unity的事件系统,但这需要该函数的用户添加对通用函数的订阅(我不想要这个)。

另一种方法是在每个脚本中搜索该函数,但这有一些问题,例如函数需要公开,在运行时将脚本添加到游戏对象时需要一些复杂的系统,而且有点粗略。

我的目标是能够在任何脚本中放置像“ClientDisconnected()”这样的函数,并且无需任何额外的行或引用即可调用它。

function unity-game-engine global
1个回答
0
投票

Unity 的 Monobehaviour 类不实现

Awake
Start
Update
等方法,而是在加载新 Monobehaviour 类时搜索并存储它们。目前尚不清楚 Unity 到底是如何做到这一点的,但您可以在这里了解更多信息。

关于您想要的功能,有几种可能的方法可以实现。最直接的解决方案可能是使用 C# 反射。但是,您仍然需要一些指导来了解在寻找“通用”方法时要查看哪些类。 Unity 仅通过查看 Monobehaviour 类来解决此问题。因此,

Awake
Start
Update
方法只能像派生 Monobehaviour 类的类中的“通用”方法一样工作。最简单的可能是为此创建您自己的基类。但是,在这种情况下,您也可以简单地创建一个
virtual
abstract
方法,要求用户在方法名称前添加关键字
override
。有点不太优雅,但在许多情况下是一个完美的解决方案(从好的方面来说,这将使该方法显示在 IDE 中,而不是使用 C# 反射时)。

我希望这能回答您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.