mysql 遊戲 知乎 遊戲效能優化雜談(七)

2021-10-20 22:31:07 字數 882 閱讀 7438

當代的遊戲引擎,cpu端的乙個主要工作其實就是在進行遊戲當中諸多actor的生命週期管理。

遊戲相對於其它軟體的乙個顯著特點是,它的執行就是為了呈現。普通軟體注重的是功能和業務流,完成既定任務是軟體的主要目的;但是遊戲軟體的目的就是呈現。

因此,「聰明地」對遊戲場景以及actor進行管理,對於遊戲的整體效能至關重要。遊戲引擎不僅僅要知道目前正在畫面當中呈現的布景以及正在「表演」的物件,還需要能夠在一定程度上預判接下來可能會被展現的內容,提前完成相關的準備工作。

同時,由於物件的建立和銷毀一般涉及到記憶體空間的分配與釋放,以及初始化指令碼的執行等,通常負荷是比較重的。所以通常應該盡量增加物件的重用,特別上對於諸如重複出現的小怪、子彈和其它場景互動物件等。這往往需要通過物件池來實現。當然著本質上是用空間換時間,需要較為充裕的記憶體(ram)空間。

物理演算也是cpu端負擔較重的部分,特別是一些基於物理的遊戲。比較簡單粗暴的優化方法上降低物理演算迭代的頻率。一般來說,對於大多數遊戲,10-15fps就可以了。但是對於一些物理演算精度要求高的遊戲,這種做法可能是不可接受的。

當場景當中有大量物體需要物理**計算的時候,首先採用計算負荷較低的broad phase或者別的什麼方法特定計算的「熱區」,也就是篩選出最重要,對遊戲影響最大,或者說正在發生激烈變化的區域,進入narrow phase進行進一步精細計算。比如,對於玩家周邊的部分進行精細計算,但是對於其它部分,如npc和環境的部分澤使用粗略計算或者乾脆替換成動畫等預製作內容。

最後,cpu端乙個對效能影響較大但是常常容易被忽略的要素,就是除錯用**。比如一些對於記憶體分配情況的記錄,對於指標合法性的檢查,以及對於圖形api的校驗等等,這些**往往開銷是相當大的。所以當cpu效能是瓶頸的時候,不妨編譯乙個非除錯版本看看有多少變化。大的團隊應該每天都有自動化的流水線生成並測試記錄非除錯版本的效能變化情況。

遊戲效能優化(基礎)

資源在遊戲中會大量頻繁地使用,而在記憶體中是按照2的冪次方來載入的,例如一張大小是2020畫素的,在程式執行中是按照3232來處理的,而且從磁碟上載入每一張都屬於io操作,非常耗費cpu時間,尤其是在android的低端裝置上。所以通過打包工具 例如texturepacker 把多張小合併到一張大圖...

塔防類遊戲效能優化分享

最近因為新冠肺炎的關係,公司做了很多預期相關的內容。其實乙個就是塔防遊戲,大概就是在固定的路線上建立炮台以抵擋病毒,防止乙個個病毒進入體內的。那做就好了,為什麼還要有優化這麼一說呢?要求只是在一些高階的pc機上執行正常即可,而且時間要求非常緊。乙個人完成,包括策劃 美術 程式 數值等工作,只有兩天。...

Unity3D 遊戲效能優化筆記

一 程式方面 1 盡量少new物件,減少gc的次數,可以使用物件池技術。2 使用ugui時,不要通過介面的z軸來做介面排序,這貌似會導致ugui的批處理失效。3 盡量少使用getcomponent 頻繁呼叫的可以用乙個變數在開始時把component存起來。4 不使用ongui 5 盡量少例項化遊戲...