王瑾
(蘇州工業職業技術學院,江蘇蘇州215104)
?
基于Unity3D手機游戲性能優化技術的研究
王瑾
(蘇州工業職業技術學院,江蘇蘇州215104)
介紹了基于Unity3D引擎研發一款塔防游戲過程中的性能優化技術,研究分析了包括程序優化技術、優化美術資源、內存優化技術、空間瘦身優化和性能分析工具等多方面的關鍵技術,游戲可保持精彩美觀效果且明顯改善和提高了游戲的運行性能和操作體驗,通過歸納總結出該游戲研發過程中對于性能優化關鍵部分的技術思想和方法,可以為其他Unity3D游戲開發愛好者提供一些參考。
Unity3D引擎;手機游戲;性能優化
Unity3D是一個可以用來輕松創建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型的互動內容多平臺綜合型游戲引擎和開發工具。流暢的游戲來自流暢的幀率,在優化過程中提升游戲的運行性能,當基本游戲功能到位時,就要確保游戲運行表現能夠達標,Unity內置分析器是衡量游戲運行表現的一個基本工具,使用分析器來分析設備上的運行代碼是一項實用的功能,正常情況下無法更改一些Unity底層的流程、結構和渲染策略等,但仍需通過對游戲程序與美術資源進行必要的優化,包括程序優化技術、優化美術資源、內存優化技術、空間瘦身優化和性能分析工具等多方面的關鍵性能技術,改善游戲的運行性能和操作體驗。
按照Unity3D游戲項目的制作流程,即模型制作->創建工程->模型構建->場景構建->程序編寫->測試發布,先在3DS Max建模軟件中進行游戲基本模型的設計制作,如防守方的羊村武士、進攻方的灰太狼,武器道具等,導出為FXB格式文件,用PS軟件設計貼圖文件,導出為PNG格式。新建Unity工程SheepWar,在Asserts文件夾導入FXB和PNG等模型資源,并陸續創建Material、Model、Prefab、Scenes、Scripts等文件夾進行分類管理。設計典型的多個游戲場景和分關卡,編制必要的智能AI腳本,在游戲管理器的腳本中進行管理、鏈接和調試[1]。
2.1程序優化技術
首先優化代碼可讀性,具備良好的編碼風格是程序性能優化的基礎,保持腳本的良好可讀性,必要的注解可以提升調試與維護時的效率,接著要優化邏輯復雜度,大部分復雜情況都與游戲本身的設計有關,要避免一些由于代碼擴展或是濫用回調造成的問題,例如考慮使用數組或者容器,便是對于會產生極大代碼量的switch或回歸寫法的最佳替代品。優化OnGUI方法可以明顯提升程序性能,不要使用原生的GUI方法,避免在其中對變量、方法進行更新和賦值,輸出變量建議在Update方法內,另外刪除腳本中為空或不需要的默認方法,合理使用變量來提高運行效率,如腳本中頻繁使用的變量就聲明為全局變量,腳本之間頻繁調用的變量或方法聲明為全局靜態變量或方法,不要頻繁獲取組件,將其聲明為全局變量,盡量直接聲明變量來代替GetComponent獲取腳本,還有先建好對象池后使用Translate來“生成”對象[2]。
2.2優化美術資源
美術資源對于程序發布包大小、性能優化、內存占用量的影響往往超過其他因素,通過對美術資源進行優化,可明顯提高運行效率。通過共享游戲對象的材料,令其在Unity中處于靜止狀態,將它們綁定在一起,由此產生的簡化繪圖調用是呈現良好移動運行性能的重要元素;合并使用同貼圖的材質球、相同材質球的網格,紋理地圖集對UI元素,使用合理的紋理MIP標準,移除所有遠處背景的網格,減小很耗性能的實時陰影,讓不同角色共享動畫,在一些關口移除額外頂點。養成良好的標簽、層次和圖層的條理化習慣,將不同的對象置于不同的標簽或圖層,三者有效結合能夠方便地按名稱、類別和屬性進行查找,平衡美學與性能進行優化粒子效果,減少發射器數量并盡量減少透明度的需求。
2.3內存優化技術
Unity3D在內存占用上一直被人詬病,特別是對于移動設備上的游戲,動輒內存占用一兩百兆字節,容易耗盡內存資源被系統強行退出造成極差的體驗。雖然Unity標榜自己的內存使用是托管的,但事實上用戶必須正確地使用內存,以保證回收機制正確運行,遵循使用原則可以讓非必要的資源盡快得到釋放,從而降低內存占用。靈活使用Unity3D里的兩種動態加載機制Resources.Load或AssetBundle,可以有效地動態加載調用資源,在資源不再使用的時候及時銷毀和釋放資源。

正確使用“垃圾回收器”(GC),確保自動清理不用的內存,分析器經常顯示CPU負荷過大的原因是GC正在收集垃圾內存,避免手動GC因為會導致本幀渲染耗費時間以幾何倍數形式上升,需要避免內存碎片產生。盡量使用for代替foreach,使用StringBuilder或string.format代替string的+=操作字符串拼接,如果一次運算量過大,可以分幀進行處理迭代運算,不要把所有運算放在同一幀,例如尋路算法、遺傳算法等,盡量使用“尾調用”來減少使用中間變量的方式來返回結果。
2.4空間瘦身優化
手機上運行的游戲產品需要考慮自身的精簡,盡可能壓縮游戲所需空間,包括控制游戲文件大小、運行時資源空間占用等方面。優化美術資源可以很好地實現對游戲文件大小的控制,可以優化幾何體模型,而在3D建模時盡可能減少模型中三角形的數量,對于模型沒有影響或肉眼難察覺到區別的頂點都要盡可能去掉,并且在三維建模軟件中盡可能重用頂點,壓縮模型的Mesh,并積極減少紋理大小,使用Texture Atlas可以幫助減少Draw Calls,考慮紋理的長寬比最好是1比1,長度值最好是2的整數冪,這樣可以達到最佳優化效果。使用Unity3D批處理技術進行壓縮,盡量使用同一個材質的物體,動態和靜態批處理之間的不同在于頂點數據的差別和使用網格不同,把這些頂點數據合并后再發送給CPU就可完成批處理,可節省很多資源的開銷。
2.5性能分析工具
Unity3D提供了強大且易用的性能分析器(Profiler),該分析器用于幫助優化游戲的性能,分析游戲在多個維度花費的時間,如渲染、動畫或邏輯花費時間的百分比。在分析器編輯器中,記錄著游戲運行每個幀的數據,單擊某個幀將在窗口下部顯示詳細信息,當前選擇的時間線區域不同從而顯示的細節也有所不同,時間線的垂直比例尺采用自動管理,并嘗試填充窗口的垂直空間。若要獲得CPU使用率區域等更多細節,可刪除內存和渲染區域,時間線和統計區域間的區隔線也可進行選定,向下拖動以增加時間線圖表使用的屏幕面積,時間線包含CPU使用率、渲染和內存,單擊面板上的關閉按鈕移除這些區域,分析控制欄上的添加區域下拉列表來重新添加,標簽區域的彩色方塊控制是否顯示關聯的時間線。
分析時調整腳本代碼會對游戲性能有小小影響,通常這種開銷較小,不太會影響游戲的幀率,重點分析游戲消耗時間最多的那些部分,比較分析代碼更改前后的數據結果,靈活應用Unity分析器為開發中的游戲進行體檢,通過Profiler.BeginSample和Profiler.EndSample等來自定義檢查范圍,關注調試CPU、內存使用率、音頻、渲染等的變化,實現游戲的性能優化[3]。
本文概述了《保衛羊村》塔防游戲過程中的性能優化技術和方法,研究和分析了包括程序優化技術、優化美術資源、內存優化技術、空間瘦身優化和性能分析工具等多方面的關鍵技術,游戲可保持精彩美觀效果且明顯改善和提高了游戲的運行性能和操作體驗,Unity3D游戲的性能優化是進階階段,仍然有很多高級的實用技術需要更深入的學習和研究,這些將在后續的項目實踐中繼續進行提煉和總結。
[1]優美締軟件上海有限公司.Unity官方案例精講[M].北京:中國鐵道出版社,2015.
[2]優美締軟件上海有限公司.Unity 4.X從入門到精通[M].北京:中國鐵道出版社,2013.
[3]金璽曾.Unity3D手機游戲開發[M].北京:清華大學出版社,2013.
(編輯:姚歡)
Research of Performance Optimizing Technologies for Designing Mobile Game based on Unity3D
Wang Jin
(Suzhou Institute of Industrial Technology,Suzhou Jiangsu 215104)
This article describes the performance optimizing technologies during the design and development of a tower defense game based on Unity3D engine,briefly researches on optimization technologies of unity programming,art resources,memory,space and performance analysis tools,which significantly improves and enhances the game's performance and operating experience while maintaining excellent aesthetic effect.The summarized key technologies and methods of performance optimizing provide a good reference for other game developers.
Unity3D engine;mobile games;performance optimization
G898
A
2095-0748(2015)22-0094-03
10.16525/j.cnki.14-1362/n.2015.22.42
2015-11-02
王瑾(1981—),女,江蘇泰州人,碩士,講師,從事Web前端設計、動畫制作、計算機技術研究。