本文將由Unity大中華區(qū)企業(yè)支持經(jīng)理高川,為大家分享Unity自帶的單元測試及性能報告工具。
在游戲開發(fā)過程中,Bug的出現(xiàn)是無法避免的。解決Bug的重要前提是及時發(fā)現(xiàn)Bug,準(zhǔn)確定位Bug。Unity提供了兩個優(yōu)秀的工具來幫助大家完成“殺蟲”工作。
Unity Editor Test Runner
在開發(fā)過程中,一個Bug被發(fā)現(xiàn)的越早,其修復(fù)的可能性越高,而修復(fù)成本則越低。為了盡早發(fā)現(xiàn)問題,避免Bug積累重疊,單元測試就顯得尤為重要。
單元測試可以針對特定功能模塊進行持續(xù)的檢測,幫助開發(fā)人員盡早發(fā)現(xiàn)問題,及時修正。在Unity編輯器中集成了單元測試模塊。該模塊源自著名的開源工程NUnit,與Unity引擎結(jié)合后,可以方便的完成日常開發(fā)中的單元測試功能。下面來介紹一下如何使用這個功能。
首先要建立測試用例。測試用例的腳本需要放到Editor 目錄下:

在測試用例腳本中引入名字空間NUnit.Framework:

測試用例函數(shù)需要一個[Test]屬性來標(biāo)識:

測試用例函數(shù)中通過Assert類下面的一系列函數(shù),進行斷言測試:

一個測試用例中可以有多個斷言,只有所有斷言都通過檢測,才會認(rèn)為一個測試用例通過了檢測。
寫好全部測試用例后,打開Unity Editor的Windows->Editor Tests Runner,在Editor Tests窗口中我們可以看到測試工具按鈕和剛剛寫的一系列測試用例:

上面一欄中包含按鈕:Run All,Run Selected和Run Failed
- Run All:運行全部測試用例
- Run Selected:運行當(dāng)前選擇的測試用例
- Rerun Failed:重新運行全部失敗的測試用例
右側(cè)的四個圖標(biāo)則分別表示:
?- 成功的測試用例數(shù)
? ? ? ? - 失敗的測試用例數(shù)
? ? ? ? - 被忽略的測試用例數(shù)
? ? ? ? - 尚未運行過的測試用例數(shù)
下方的樹狀結(jié)構(gòu)表示具體測試用例當(dāng)前的狀態(tài)。
同時Editor Tests提供headless的運行模式,可以很好的與CI&CD等自動化流水線配合。
Game Performance Reporting
Unity提供的另外一個工具是Game Performance Reporting(GPR)性能報告。這是一個用來做運行時錯誤追蹤的系統(tǒng)。目前市面上也有很多運行時錯誤追蹤系統(tǒng),但很多在和Unity引擎結(jié)合使用中效果并不理想。主要表現(xiàn)在,追蹤到的代碼可讀性差,錯誤追蹤不準(zhǔn)確,定位錯誤等等。結(jié)果造成了開發(fā)者看到很多錯誤報告上來,然而并不能解決的尷尬局面。做為Unity原生解決方案,Game Performance Reporting性能報告系統(tǒng)完美解決了這個問題。下面來簡單介紹一下這個系統(tǒng)。
首先改系統(tǒng)整合簡單。Game Performance Reporting性能報告繼承了Unity一貫的使用簡單的風(fēng)格,在Unity5.4之前的Unity版本(目前僅支持Unity5.x系統(tǒng)),開發(fā)者需要去Unity官網(wǎng)下載一個UnityPackage并導(dǎo)入工程。然后在游戲啟動時的某個腳本上加上一句代碼:
CrashReporting.Init("<Project Id>");
其中Project ID是在Unity官網(wǎng)上生成的唯一ID。
在Unity5.4版本中,Game Performance Reporting系統(tǒng)直接被整合到了編輯器中。開發(fā)者只需要在Services窗口中將Performance Reporting的開關(guān)打開即可:

當(dāng)游戲在運行時(測試期或者上線后)出現(xiàn)異常的時候,通過登錄Unity開發(fā)者頁面的Unity Online Services 就可以查看到異常的信息。
堆棧部分,在信息后臺是可以看到清晰的異常定位的。這樣可以快速的幫助開發(fā)者定位到問題所在:

同時Game Performance Reporting提供異常的基本數(shù)據(jù)統(tǒng)計,包括異常出現(xiàn)的設(shè)備,異常出現(xiàn)的時間點,影響到的客戶數(shù)量以及影響到的版本等等:

通過以上兩個工具,在開發(fā)期和運行時,開發(fā)者都可以很好的管理游戲的Bug數(shù)量,評估工程的質(zhì)量,及時發(fā)現(xiàn)和修改問題,從而提供更好的游戲體驗給廣大玩家。