我有一个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#很一般,如果问题有点怪异,请抱歉。
如果有不清楚的地方,请通知我,以便我进行澄清:)
答案 0 :(得分:3)
如果您未对其进行任何显式调用,则将在Scene层次结构中每个已启用的gameObject的每个已启用组件/单一行为上每帧调用一次Update。
在您的情况下,您只是在做参考,而不是创建Main组件的新实例。因此,这里不会再叫它一次。
答案 1 :(得分:2)
将对象作为参数传递给方法不是继承。
: MonoBehaviour
旁边的Main
指定它是从MonoBehaviour
继承的。没有任何东西可以从Main
继承。
如果您有OtherClass : Main
和OtherClass
有一个Update
方法,Unity将调用该方法来更新它,而不是调用Update
父类中的方法。
如果要同时调用两者,则Main.Update
应该是protected virtual
,而OtherClass.Update
应该是protected override
,并且还需要显式调用base.Update()
。