gpt4 book ai didi

c# - (Unity) 如何防止 MonoBehavior Awake() 函数在 child 中被覆盖

转载 作者:行者123 更新时间:2023-12-05 03:57:44 27 4
gpt4 key购买 nike

是否可以在子类中禁用覆盖 MonoBehavior 函数(如 Start()、Awake()、Update() 等)的选项?

这背后的原因是,当多个人在 Unity 项目上工作时,没有意识到这个问题的人可能会禁用在父项中定义的重要初始化,这可能会导致难以调试的不良行为。

在我看来,这违反了 OOP 的原则,因为您可能会在其他地方弄乱很多东西。尝试执行此操作时,您甚至不会在 Visual Studio 中看到警告。

public class A: MonoBehavior
{
void Awake()
{
// Do some stuff
}
}

public class B: A
{
void Awake()
{
// This actually overrides stuff that Awake() does in parent class
}
}

最佳答案

解决方案简单且符合 OOP 原则。任何你认为将来可能有 child 的类(class),在其中定义 stub

protected virtual void Awake() {}
protected virtual void Start() {}
protected virtual void OnEnable() {}

...列表还在继续。

现在,如果有人在没有“覆盖”的情况下使用子项中的任何回调,IDE 肯定会通知他们存在回调的基本实现。

关于c# - (Unity) 如何防止 MonoBehavior Awake() 函数在 child 中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com