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

时间:2018-07-23 22:18:29

标签: c# class oop unity3d

我有一个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();
    }
}

这是否意味着Main中的Update方法被调用了两次?因为OtherClass采用Main作为参数?因为如果是这样的话,这将对性能造成严重的影响。

我对OOP还是很陌生,所以C#很一般,如果问题有点怪异,请抱歉。
如果有不清楚的地方,请通知我,以便我进行澄清:)

2 个答案:

答案 0 :(得分:3)

如果您未对其进行任何显式调用,则将在Scene层次结构中每个已启用的gameObject的每个已启用组件/单一行为上每帧调用一次Update。

在您的情况下,您只是在做参考,而不是创建Main组件的新实例。因此,这里不会再叫它一次。

答案 1 :(得分:2)

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

: MonoBehaviour旁边的Main指定它是从MonoBehaviour继承的。没有任何东西可以从Main继承。

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

如果要同时调用两者,则Main.Update应该是protected virtual,而OtherClass.Update应该是protected override,并且还需要显式调用base.Update()