为了账号安全,请及时绑定邮箱和手机立即绑定

是否为新类 C# 的每个继承执行更新

是否为新类 C# 的每个继承执行更新

C#
尚方宝剑之说 2021-10-24 17:03:00
我有一个 Unity 脚本,它有一个Main类,其中计算和执行游戏的所有逻辑。该类具有以下结构:public class Main : MonoBehaviour {    private OtherClass OtherGameLogic = new OtherClass(this);            private void Update ()     {        // all complex frame to frame calculations are done here.         // this is gpu and cpu intensive code...    }}现在我想要一个其他类来处理游戏中的其他一些逻辑。这个类需要在 Main 类中初始化,但也需要像 main 一样访问 Monobehaviour 类。这个类看起来像这样:public class OtherClass{    private Main M;    public OtherClass(Main m)    {        M = m;    }      private void SomeMethod()    {        m.SomeFunctionThatNeedsMToRun();    }}这是否意味着UpdateMain中的Method 被调用了两次?因为OtherClass采用Main的参数?因为如果是这样的话,这对性能来说会很糟糕..我对 OOP 很陌生,C# 很一般,如果问题有点奇怪,我很抱歉。如果有什么不清楚的,请告诉我,以便我澄清:)
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

如果您不对其进行任何显式调用,则更新将在场景层次结构中每个启用的游戏对象的每个启用的组件/单一行为上每帧调用一次。

在您的情况下,您只是在做一个引用,而不是创建 Main 组件的新实例。因此,这里不会再调用一次。


查看完整回答
反对 回复 2021-10-24
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

将对象作为参数传递给方法不是继承。

: MonoBehaviour旁边Main的指定它继承自MonoBehaviour。没有任何东西继承自Main.

如果您拥有OtherClass : MainOtherClass拥有一个Update方法,Unity 将调用该方法来更新它,而不是Update从其父类调用该方法。

如果您希望两者都被调用,则Main.Update应该protected virtual并且OtherClass.Update应该protected override并且还需要显式调用base.Update().


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信