c# - 包装 Unity C# Monobehaviour 是否高效?

标签 c# unity-game-engine

我应该用我控制的另一个抽象类包装我的大部分(150 多个)C# 单一行为,并向其中添加函数吗?或者说,如果 60% 的单一行为会使用我的特殊包装类中的函数,这是否效率低得可笑?另一种方法是向每个类添加 onDestroy 和各种其他函数。将这些函数组合起来,而不是仅仅在各处自动继承它们,有什么优点?


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

最佳答案

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

这个article还有这个one表明删除所有行为并使用单个行为来管理所有包装的行为可能会将性能提高多达 11 倍,

您还可以找到其他references准确地展示了实现魔术方法时幕后发生的情况(简短的回答,而不是反射)

关于c# - 包装 Unity C# Monobehaviour 是否高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53953582/

相关文章:

C# 错误 : Cannot implicitly convert type 'int' to 'short'

c# - 编码(marshal)结构后跟固定大小的数据

javascript - crypto-js 在 Unity 中抛出编译错误

android - 在 Android Studio 中使用 Vuforia SDK

unity-game-engine - 更改 Unity 2D 中的帧顺序

javascript - 站点分析工具如何知道访问者来自的 URL?

C# 二进制搜索变体

c# - 简单的正则表达式匹配

android - 阴影显示在统一编辑器中,但不显示在 Android 设备上

unity-game-engine - 我可以在游戏中混合 2d 和 3d 场景吗