我有一個 Unity 腳本,它有一個Main類,其中計算和執(zhí)行游戲的所有邏輯。該類具有以下結(jié)構(gòu):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... }}現(xiàn)在我想要一個其他類來處理游戲中的其他一些邏輯。這個類需要在 Main 類中初始化,但也需要像 main 一樣訪問 Monobehaviour 類。這個類看起來像這樣:public class OtherClass{ private Main M; public OtherClass(Main m) { M = m; } private void SomeMethod() { m.SomeFunctionThatNeedsMToRun(); }}這是否意味著UpdateMain中的Method 被調(diào)用了兩次?因為OtherClass采用Main的參數(shù)?因為如果是這樣的話,這對性能來說會很糟糕..我對 OOP 很陌生,C# 很一般,如果問題有點奇怪,我很抱歉。如果有什么不清楚的,請告訴我,以便我澄清:)
2 回答

暮色呼如
TA貢獻1853條經(jīng)驗 獲得超9個贊
如果您不對其進行任何顯式調(diào)用,則更新將在場景層次結(jié)構(gòu)中每個啟用的游戲?qū)ο蟮拿總€啟用的組件/單一行為上每幀調(diào)用一次。
在您的情況下,您只是在做一個引用,而不是創(chuàng)建 Main 組件的新實例。因此,這里不會再調(diào)用一次。

一只斗牛犬
TA貢獻1784條經(jīng)驗 獲得超2個贊
將對象作為參數(shù)傳遞給方法不是繼承。
在: MonoBehaviour
旁邊Main
的指定它繼承自MonoBehaviour
。沒有任何東西繼承自Main
.
如果您擁有OtherClass : Main
并OtherClass
擁有一個Update
方法,Unity 將調(diào)用該方法來更新它,而不是Update
從其父類調(diào)用該方法。
如果您希望兩者都被調(diào)用,則Main.Update
應(yīng)該protected virtual
并且OtherClass.Update
應(yīng)該protected override
并且還需要顯式調(diào)用base.Update()
.
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報
0/150
提交
取消