首页 > 解决方案 > 包装 Unity 的 C# Monobehavior 是否有效?

问题描述

我应该用我控制的另一个抽象类来包装我的大部分(150 多个)C# 单一行为,并向它添加函数吗?或者,如果只有 60% 的单一行为将使用我的特殊包装类中的函数,这是否非常低效?另一种方法是为每个类添加一个 onDestroy 和各种其他函数。通过组合来拥有这些功能,而不是在任何地方自动继承它们有什么好处?


我使用 DoTween(一个补间库)和 MEC(而不是协程),我使用标签或游戏对象运行每个协程和补间。每当我做这些事情时,我都会使用一个为我跟踪它们的类注册标签或游戏对象。我这样做是为了随时暂停游戏而不会弄乱 Time.timeScale,并获得“真正的”暂停。使用 MEC 的缺点是,当您杀死一个游戏对象时,它不会自动停止您的协程——我想在我的包装类中手动执行此操作。这就是为什么我想知道我是否应该这样做。

标签: c#unity3d

解决方案


这实际上取决于你的游戏,但简短的回答是:是的,MonoBehaviours 有很多开销,如果你在场景中得到很多,这可能会非常明显,MonoBehaviour 的实际问题是魔术方法(更新,启动、唤醒等)

这篇文章和这篇文章表明,删除你的所有行为并拥有一个管理所有包装行为的单一行为可以将性能提高多达 11 倍,

您还可以找到其他参考资料,准确显示实施魔术方法时幕后发生的事情(简短回答,而不是反射)


推荐阅读