C# 是包装统一';单行为有效?

C# 是包装统一';单行为有效?,c#,unity3d,C#,Unity3d,我应该用我控制的另一个抽象类来包装我的(150+)C#monobhavior,并向其中添加函数吗?或者,如果60%的MonoBehavior将使用我的特殊包装器类中的函数,那么这是非常低效的吗?另一种方法是向每个类添加onDestroy和其他各种函数。通过组合将这些函数引入,而不仅仅是在任何地方自动继承它们,有什么好处 我使用DoTween(一个tweening库)和MEC(而不是协同程序),我使用一个标签或在一个游戏对象上运行每个协同程序和tween。每当我做这些事情时,我都会用一个类来注册

我应该用我控制的另一个抽象类来包装我的(150+)C#monobhavior,并向其中添加函数吗?或者,如果60%的MonoBehavior将使用我的特殊包装器类中的函数,那么这是非常低效的吗?另一种方法是向每个类添加onDestroy和其他各种函数。通过组合将这些函数引入,而不仅仅是在任何地方自动继承它们,有什么好处



我使用DoTween(一个tweening库)和MEC(而不是协同程序),我使用一个标签或在一个游戏对象上运行每个协同程序和tween。每当我做这些事情时,我都会用一个类来注册标签或游戏对象,以便为我跟踪它们。我这样做是为了随时暂停游戏,而不影响time.timeScale,并获得“真正的”暂停。使用MEC的缺点是,当你杀死一个游戏对象时,它不会自动停止你的协同进程——我想在我的包装类中手动完成这项工作。这就是为什么我想知道我是否应该这样做。

这实际上取决于你的游戏,但简短的回答是: 是的,单行为有很多开销,如果场景中有很多单行为,这一点非常明显,单行为的实际问题是神奇的方法(更新、启动、唤醒等)

这表明,删除所有行为并使用一个单独的行为来管理所有包装的行为可以将性能提高11倍


您还可以找到其他方法来精确显示在实现神奇方法(简短回答,而不是反射)时在幕后发生的情况。

您的意思是创建一个扩展单行为的类
M
,并使
M
实现更新、启动等,然后让您的所有类扩展
M
?不要那样做。单一行为是昂贵的。我们通常只有一个可以获取更新并在其上运行协同程序。@Draco18s我的意思是创建一个具有一些额外功能的类M,比如RemoveAllTagsRelatedToClassMFromTagingSystem()。我不会试图覆盖更新。@RetiredInja有可能让一个类出现在检查器中而不是一个单一行为吗?这就是ScriptableObjects的用途吗?看来如果我不能使用检查员,我会给自己带来很多麻烦。我不运行任何更新函数,在我的整个代码库中只有一个启动函数。你认为那些单一行为还在拖累我吗?据我所知,问题在于更新函数的调用数量,而不是单一行为的数量。您可以在此处阅读更多内容:(部分
它不适用于intellisense
及以下内容)祝您好运