public class MonoBehaviourBase : MonoBehaviour
{
private void OnDestroy()
{
// do base destroy...
}
}
public class BattleField: MonoBehaviourBase
{
public void OnDestroy()
{
// do battle destroy
}
}
这种写法,不会有任何警告!!!
但是在执行结果上,基于Unity-Mono体系
系统将只会执行BattleField的OnDestroy,
这样MonoBehaviourBase的OnDestroy不被调用!
会发生不可预期的行为。
改写方法为:
public class MonoBehaviourBase : MonoBehaviour
{
private void OnDestroy()
{
// do base destroy...
this.OnDestroyBase();
}
public virtual void OnDestroyCallback() {}
}
public class BattleField: MonoBehaviourBase
{
public override void OnDestroyCallback()
{
// do battle destroy
}
}
若子类重写了 OnDestroy, 编译器将会警告!
除非有人恶意重写:public new void OnDestory();
达到了代码安全的目的
[Unity]MonoBehaviour多继承下的重载函数调用保障
最新推荐文章于 2025-10-30 15:16:51 发布
本文探讨了在Unity中如何正确地覆盖MonoBehaviour的OnDestroy方法,以确保基类和派生类的方法都能被调用,避免潜在的不可预期行为。通过修改方法签名并使用回调机制,可以增强代码的安全性和可维护性。
2187

被折叠的 条评论
为什么被折叠?



