本指南將說明典型的遊戲開發週期,閱讀本指南後,您可能會發現這份指南也很有參考價值。
使用 Unity 時,開發生命週期包含三個階段:
- 規劃和設計
- 開發及測試
- 發布及維護
規劃和設計
在規劃和設計階段,您會決定如何建構遊戲。您可以決定如何解決行動裝置開發的挑戰,並找出開發時要使用的工具和程序。
取得所有團隊成員的意見
與美術、工程、設計、音訊和製作團隊合作,找出並記錄實作工作。例如:
- 美術團隊可能會為角色和環境建立素材資源紋理和網格預算。
- 工程團隊可能會針對每個平台設定記憶體和效能檢查點,以進行剖析。
- 設計人員可能會規劃可提供體驗的遊戲機制。
- 音訊專家可能會審查 UI、2D 和 3D 空間音效之間的聲音連續性規定。
- 製作團隊可能會傳達發布需求,並確保團隊目標一致且進度順利。
行動裝置專用設計
為行動平台開發應用程式時,需要考量以下幾點:
- 螢幕顯示比例不一
- 耗電量
- 溫度和處理器節流
- 觸控輸入
- 跨平台開發
- 圖形 API (Vulkan 或 OpenGL ES)
如要瞭解專為行動裝置設計時的獨特考量,請參閱 Unity 的「Android development in Unity」和 Google Play 學習中心。
開發及測試
在開發和測試階段,您會建構遊戲,並進行測試和發布前準備。您在 Google Play 上進行一些有限的內部測試,為符合發布需求做好準備。您可根據 Play Asset Delivery 和 Unity Addressables 系統,在 Unity 中調整部署策略並整理資產。
以下各節說明 Unity 工具和技術,協助您開發 Android 應用程式。
顯示
轉譯是指在螢幕上繪製 Unity 場景中的 3D 和 2D 資產。雖然 Unity 引擎會處理算繪作業,但請務必考量 Android 平台的幾個因素。
紋理
根據目標裝置,判斷是否需要最大紋理大小。剖析記憶體配置時,請查看變更目標紋理大小後可能節省的空間。
影格時間
為避免 Android 裝置過熱,請將平均目標影格時間值設為 21 毫秒以下。有時,例如在載入或短暫的電影體驗期間,影格時間可能會超過 21 毫秒,但核心遊戲體驗應維持在 21 毫秒的門檻以下。
在行動平台上,如果未達到最低目標,強制 VSync 會限制影格速率。舉例來說,如果螢幕更新率為 60 Hz,但遊戲無法達到每秒 60 個影格,系統就會將影格數調降至 30;如果無法達到每秒 30 個影格,系統就會調降至 15。
許多 Android 裝置的螢幕刷新率為 60 Hz 和 120 Hz。權衡以更短的影格時間為目標 (60 Hz 更新率的目標為 10 毫秒,120 Hz 的目標為 5 毫秒) 的優點,同時避免因提高算繪率而導致熱節流和耗電。
如要在 Unity 遊戲中設定特定影格速率,請使用 Application.targetFrameRate。
如果應用程式呈現下一個影格的時間,比螢幕刷新率要求的時間長,Android Frame Pacing 程式庫可協助您順暢算繪影格。對於 Unity 2021 以上版本,啟用 Android 影格速度會將螢幕更新率設為最符合目標影格速率的值。這樣可確保遊戲不會因不必要的螢幕更新而耗用電池電力。
如要啟用程式庫,請依序前往「Project Settings」 >「Player」,然後在「Settings for Android」下方勾選「Optimized Frame Pacing」核取方塊。

Vulkan API
Vulkan 是跨平台的高效能 3D 圖形 API,與 OpenGL ES 相比,負擔較低。Unity 可以透過兩種不同的方式使用 Vulkan。
Auto Graphics API
您可以在 Vulkan 中使用 Auto Graphics API,但這可能會因您安裝的 Unity 版本而有不同的行為。如要選取這個選項,請依序前往「Project Settings」>「Player」>「Rendering」。
選擇要使用的 Unity 版本時,請注意下列事項:
- Unity 2021.1 和更早版本不支援使用 Auto Graphics API 的 Vulkan。Unity 會嘗試使用 OpenGL ES 3.2。如果裝置不支援 OpenGL ES 3.2,Unity 會依序改用 OpenGL ES 3.1、3.0 或 2.0。
- Unity 2021.2 以上版本會優先使用 Vulkan。如果裝置不支援 Vulkan,Unity 會改用 OpenGL ES 3.2、3.1、3.0 或 2.0。

手動圖形 API
或者,您也可以停用「自動圖形 API」,手動啟用 Vulkan。 如果您使用 Unity 2021.1 或舊版,這是使用 Vulkan 的唯一方法。
如果 Vulkan 在這份清單中的排序高於 OpenGL ES,Unity 會先嘗試使用 Vulkan。如果裝置不支援 Vulkan,Unity 會使用 OpenGL ES 執行。如要進一步瞭解 Android 上的 Vulkan,例如如何使用新式 Graphics API 和提升遊戲效能,請參閱「開始使用 Vulkan」。

繪製呼叫
螢幕上顯示的所有內容都與一或多個繪圖呼叫相關聯。在行動平台,您應盡量減少傳送至圖形處理器 (GPU) 的繪圖呼叫次數,並進行最佳化。
您可以將繪圖呼叫視為在紅燈前排隊的車輛。綠燈亮起後,燈號變換前可通過一定數量的車輛。如果燈號變成黃色,表示您已達到理想的目標影格時間 (21 毫秒),如果燈號變成紅色,表示您已達到 33 毫秒的影格時間上限。如果超過這個時間,就會影響下一個轉譯影格,導致影格速率低於目標 30 FPS。
如要瞭解如何提升遊戲中的繪圖呼叫效能,請參閱 Unity 支援的批次處理文章。
陰影
陰影投射繪製呼叫可能是最耗用 GPU 資源的作業,即使是簡單的環境,也會耗用大部分的 GPU 時間。如要降低陰影投射繪圖呼叫的成本,請嘗試使用硬陰影而非柔和陰影。如果低階裝置的 GPU 仍無法負荷,請考慮使用斑點陰影,而非硬陰影。
紋理
建議在 Android 上使用 ASTC,壓縮 RGB 和 RGBA 紋理。在 Unity 中,您在 Android 上使用的紋理壓縮選項至少應為 ETC2。您可以在「Unity Build Settings」中,將 ETC2 設為 ASTC 的備份。
如要查看各平台支援的完整格式清單,請參閱 Unity 說明文件中的「手冊:各平台建議、預設和支援的紋理格式」。
使用者介面和顯示比例
您可以使用 Unity 的裝置模擬器工具,直接在 Unity 編輯器中預覽各種裝置的螢幕解析度、方向和長寬比。你可以切換「遊戲」檢視畫面和「裝置模擬器」檢視畫面。
如要預覽這項工具,請參閱「在 Unity 中使用裝置模擬器模擬遊戲!」。

您可以在 Github 的 games-samples 存放區中找到 Trivial Kart 原始碼。
在「裝置模擬器」檢視畫面中,您可以選取下拉式選單中的裝置選項,快速驗證 UI 畫布元素的版面配置和正確性:


如要進一步瞭解 Unity 的 UI 最佳化技術,請參閱 Unity 的下列教學課程:Optimizing Unity UI。
物理學
Unity 內建 Nvidia PhysX 引擎。行動裝置的預設設定可能會耗用大量資源,因此請注意下列事項:
- 請考量目標影格速率,並據此設定固定時間步長。 預設值為 0.02 毫秒或 50 Hz。如要達到 30 fps 的目標,可以將此值提高至 0.03 或更高。
- 請考慮簡化網格碰撞器,並盡量減少圖層碰撞矩陣,以判斷特定圖層類型的遊戲物件之間的互動。
如要瞭解手機遊戲的物理設定和最佳化做法,請參閱 Unity 的「Optimize Your Mobile Games」電子書。
個人資料
應用程式達到重大故障點之前,應用程式開發人員通常會忽略或忽略剖析。建議您在程序中安排專屬的剖析時間,並採用下列最佳做法:
- 在開發期間找出可分配剖析時間的關鍵點,而不是隨機安排。
- 儲存設定檔快照,以便搭配 Unity Profile Analyzer 使用。
- 在目標裝置上分析遊戲,準確瞭解遊戲在目前開發階段的效能。
- 分析遊戲的不同部分。
- 瞭解玩家的遊戲方式。(請勿只在遊戲處於閒置狀態或暫停畫面時進行剖析)。
- 在遊戲執行一段時間後,以持續模式進行設定檔分析,有助於找出行動裝置過熱時可能遇到的節流問題。
您可以單獨或合併使用下列剖析工具。
Unity Profiler:Unity Profiler 是完全整合的效能分析工具,可在 Unity 編輯器中對程式碼執行分析,並連線至執行開發模式建構版本的獨立 Android 裝置。
Android GPU 檢查器:使用 Android GPU 檢查器 (AGI) 即可執行影格層級的偵錯作業。AGI 也會分析系統服務,包括 GPU、CPU、記憶體、電池和 GPU 計數器。
如要瞭解如何在 Unity 中剖析遊戲,請觀看 Unity 的「Introduction to profiling in Unity」影片,或閱讀「Ultimate guide to profiling Unity games」。
記憶體管理
Android 程序會共用目標裝置的可用記憶體。目標測試裝置有充足的可用記憶體資源時,您應分析記憶體用量。在遊戲中固定時間點執行記憶體測試,以便適當比較工作階段和記憶體用量趨勢。
使用 C# 編寫指令碼時,請謹慎使用字串、字串比較,以及字串相關物件的分配 (例如遊戲設定的 JSON 檔案)。這類物件會頻繁產生記憶體配置,可能導致記憶體片段化。
如果需要處理大量字串,建議使用 StringBuilder 類別,而不是就地串連字串 (例如「this」+「is」+「a」+「bad」+「idea」與 StringBuilder.Concat()
函式呼叫)。
如要進一步瞭解字串,請參閱 Unity 說明文件中的「字串和文字」。
根據偏好的 ScriptableObject
類型評估 TextAsset 和 JSON 文字資源。ScriptableObjects
有效率地處理跨場景資料儲存,並允許從編輯器到播放時間的修改。
如要瞭解如何使用預設 JSON 控制代碼以外的替代方案,進行行動裝置最佳化,請參閱 Hutch 上的「The hidden optimization in network games」一文。
使用 Memory Advice API 判斷執行階段的記憶體用量。這項 API 會顯示紅綠燈指標,指出記憶體用量是高、正常還是低。您可以訂閱指標以接收最新消息,也可以直接輪詢指標以瞭解目前狀態。如果收到紅色信號,請考慮減少遊戲物件集區或快取。在正式營運期間,請將這項背景資訊納入遊戲遙測資料,並在發布後查看成效指標。
如要深入瞭解 Android 裝置的記憶體組織,以及 Unity 如何與其搭配運作,請觀看「瞭解 Android 記憶體用量 (2018 年 Google I/O 大會)」。影片會說明記憶體問題的類型,以及記憶體不足終止程序何時會生效。
垃圾收集
受管理記憶體環境中的垃圾收集作業會清除未使用的記憶體片段,這些片段可供應用程式回收使用。請按照垃圾收集最佳做法操作,避免不必要的記憶體資源分配。
舉例來說,請建立遊戲物件集區,而非使用隨選分配 (GameObject.Instantiate
)。如果是大型集區,請考慮在多個影格中分配,以降低遊戲在入門級 Android 裝置上沒有回應的風險。
請看下列程式碼片段,瞭解從 MonoBehaviour 開頭呼叫的簡單協同程式:
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
您可以編輯 MonoBehaviour 範本檔案,移除預設的 Start()
和 Update()
存根函式,以免在開發時不慎留下空白函式。
如要概略瞭解 MonoBehaviour 事件的執行順序,請參閱 Unity 說明文件中的「事件函式的執行順序」。如要進一步瞭解記憶體管理,請參閱「Unity 中的記憶體管理」課程。
如需行動遊戲效能最佳化提示,請參閱「Optimize your mobile game performance: Tips on profiling, memory, and code architecture from Unity's top engineers」(最佳化行動遊戲效能:Unity 頂尖工程師提供的剖析、記憶體和程式碼架構提示)。
Prefab 集區
CPU 影格時間尖峰幾乎完全是由遊戲期間的 Prefab 例項化所造成。進入遊戲前,請考慮預先暖機投射物、可生成敵人及視覺效果的物件集區,以減少或消除啟動 CPU 尖峰。您可以在場景的載入或簡介序列中,將額外的最佳化作業分散到多個「初始化影格」。
您可以在 Unity 資產商店找到許多與遊戲物件集區管理相關的第三方集區資產。另外,只要應用程式、服務請參閱 Unity Learn 的物件集區簡介。
資產交付
首次部署至 Google Play 時,應用程式大小設有限制。視遊戲大小和性質而定,您可能需要部分或所有遊戲資源 (角色模型、環境、UI 元素等),才能提供預期體驗。
您可以使用 Play Asset Delivery (PAD) 服務,管理遊戲在安裝時、快速追蹤或隨選時所需的資產。Unity 資產包已整合支援 PAD,您可以使用這項工具指定要提供的元素。
Addressables
只要準備並檢查 Addressables 命名系統,在執行階段設定動態資源 (例如預製物件、紋理和音效檔案) 就不再是複雜的作業。可定址資產會將內容的排列方式與內容的建構和載入方式分開。Addressables 系統會取代 Resources 資料夾和資產組合,簡化您參照資產的方式,並在執行階段載入資產。
如需範例,請參閱 GitHub 上的使用 Addressables 套件的示範專案。如要進一步瞭解可定址資產的開發作業,請參閱 Unity 網誌上的可定址資產系統。
使用可定址素材資源版面配置時,將過少或過多素材資源併入通用組合,都有優缺點。如要進一步瞭解如何使用可尋址電視廣告管理內容,請參閱「使用可尋址電視廣告簡化內容管理作業」。
您可以設定獨立的試用版,並試用各種存取模式,熟悉可尋址系統。您也可以查看適用於 Unity 2019.3 以上版本的 BuildLayout Explorer 開放原始碼專案,並檢查 Addressables 產生的 buildlayout.txt
報表。
Unity 開放式專案 Chop Chop 的資產是使用 Addressables 系統封裝,用於所有載入和卸載作業。如要逐步瞭解如何設定 Addressables 組合的結構和設定,請參閱「Packaging content with Addressable Assets | Open Projects Devlog」。
在 Chop Chop 專案中,預設載入的唯一場景是「Initialization」場景,該場景已設定為使用 AssetReferences
,而非專案中資產 (場景、預先建構的物件等) 的直接連結。
您可以在 GitHub 上找到 Unity Open Project:Chop Chop 的原始碼。雖然專案已停止開發,但仍可使用 Git 存放區和說明文件。
第三方外掛程式
如果您使用第三方外掛程式 (例如 Unity Asset Store 中的外掛程式),請務必檢查資料夾,並從「Resources」資料夾中移除不必要的資產。在建構過程中,Unity 會收集 Resources 資料夾中的所有資產,並將其封裝在單一組合包中,可在執行階段存取。這可能會增加最終套件的大小,而且通常不需要。
如要快速找出所有資源資料夾,請在「Project」面板中搜尋「Resources」。接著選取各個檔案,即可瞭解檔案內容,以及是否為遊戲所需。

發布及維護
準備好發布手機遊戲時,請決定發布對象、如何進行 Alpha 版和 Beta 版測試,以及如何監控和追蹤發布後的成效。
分析受限版本的意見回饋
您可以向特定目標對象推出遊戲,進行大規模的 Beta 版測試,也可以在所有市場全面推出遊戲。透過有限發布,您可以根據更廣泛的實際目標對象和裝置組合,調整應用程式效能。
舉例來說,您可以運用 Android Performance Tuner for Unity 和 Google Analytics for Unity,深入瞭解應用程式效能和玩家趨勢,開發團隊可據此調整並推送更新。您也可以使用分析資料,規劃續集或類似類型的相關遊戲。
Alpha 版和 Beta 版測試
在 Google Play 管理中心設定應用程式設定檔後,即可準備公開 Alpha 和 Beta 版測試版本,並發布給特定對象進行發布前審查。向有限的目標對象發布應用程式,有助於您在更多裝置上解決最終問題,並收集初步意見回饋,以便在向全球發布前做出回應。
您的 Unity 建構版本是透過 Android App Bundle 發布。如需相關資訊,請參閱 Unity 的「手動:向 Google Play 提交」一文,其中也說明瞭從 APK 檔案到 AAB 格式的變更。
監控及追蹤
在遊戲的營運和發行階段,您可以使用 Android Vitals,追蹤您在開發和測試期間可能無法存取的裝置效能問題。詳情請觀看「觸及範圍、裝置和 Android Vitals 的遊戲新功能」。
大型開發團隊通常會使用獨特的自訂遊戲遙測管道,提供與裝置效能相關的指標。請記得善用 Android Performance Tuner (APT) 和對應的 Unity 外掛程式,微調影格速率、圖像擬真度、載入時間和放棄載入情況等相關指標。請按照「將 Android Performance Tuner 整合至您的 Unity 遊戲」中的逐步指南操作。
遊戲發布後,生命週期不會就此停止。 監控、維護及回覆成效和意見回饋至關重要,有助於提升使用者滿意度、獲得好評,並在所有市場中提高遊戲採用率。