簡介
以下指南說明如何使用 Firebase Unity SDK,對 Unity 遊戲的編譯和建構程序進行偵錯。本文說明如何調查及解決在為新平台設定及建構遊戲時,或更新後可能遇到的許多常見問題。並依程序中可能發生這些錯誤的時間排序。請依序查看並解決問題。
除了本文之外,如需更多資訊,請參閱 Firebase for Unity 常見問題。
Play 模式編譯問題
第一類建構問題可能發生在您嘗試啟動行動建構之前,在編輯器中進行測試時。本節說明在 Play 模式之前和期間發生的所有 Firebase 錯誤。
Unity 啟動或偵測到依附元件、程式碼或其他資產有變更時,會嘗試重建專案。如果專案無法在當時編譯,編輯器會將編譯錯誤記錄到控制台,如果您嘗試進入 Play 模式,Unity 的「Scene」分頁會顯示 All compiler errors have to be fixed before you can enter playmode!
錯誤彈出式視窗。
偵錯 Firebase 相關的編譯問題
缺少型別、類別、方法和成員
許多 Firebase 問題都是因為編輯器和編譯器找不到必要的型別、類別、方法和成員。常見症狀包括以下變異:
The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'
解決步驟:
在程式碼中使用 Firebase 類別或方法時,請務必為所需的特定 Firebase 產品提供正確的
using
指令,確保這些類別或方法可用。確認您已匯入適當的 Firebase 套件:
- 如要匯入適當的套件,請執行下列任一操作:
- 將 Firebase Unity SDK 新增為
.unitypackage
s 或 - 請查看「其他 Unity 安裝選項」,並執行其中一個替代方案。
- 將 Firebase Unity SDK 新增為
- 請確認專案中的每個 Firebase 產品和 EDM4U:
- 使用相同版本
- 只能透過
.unitypackage
s OR Unity Package Manager 安裝。
- 如要匯入適當的套件,請執行下列任一操作:
如果您在「10.0.0」版本之前匯入 Firebase Unity SDK (如
.unitypackage
),Firebase Unity SDK ZIP 封存檔會包含支援 .NET 3.x 和 .NET 4.x 的套件。確認專案中只包含相容的 .NET Framework 層級:- 如要瞭解 Unity 編輯器和 .NET Framework 層級的版本相容性,請參閱「將 Firebase 新增至您的 Unity 專案」。
- 如果您不小心在錯誤的 .NET Framework 層級匯入 Firebase 套件,或需要從使用
.unitypackage
切換至其他 Unity 安裝選項,最乾淨的方法是透過這個遷移章節中提及的方法移除所有 Firebase 套件,然後重新匯入所有 Firebase 套件。
請確認編輯器正在重建專案,且您嘗試播放的內容反映了專案的最新狀態:
- 根據預設,Unity 編輯器會在偵測到資產或設定變更時重建。
- 這項功能可能已停用,且 Unity 編輯器設為手動重新整理/重新編譯。請調查這個問題,並嘗試手動重新整理。
Play Mode 執行階段錯誤
如果遊戲可以啟動,但執行時發生 Firebase 相關問題,請嘗試下列做法:
確認在 Mac OS 的「安全性與隱私權」中核准 Firebase 套件
如果在 Mac OS 編輯器中啟動遊戲時,系統顯示「『FirebaseCppApp-<version>.bundle』無法開啟,因為開發人員無法驗證」對話方塊,您必須在 Mac 的「安全性與隱私權」選單中核准該特定套件組合檔案。
如要這麼做,請依序點選「Apple 圖示」>「系統偏好設定」>「安全性與隱私權」
在安全性選單中,頁面大約一半的位置會顯示「『FirebaseCppApp-<version>.bundle』並非來自已識別的開發人員,因此無法使用」。
按一下標示為「允許」的按鈕。
返回 Unity,然後再次按下「Play」。
接著,畫面會顯示類似第一個的警告:
按下「開啟」,程式即可繼續執行,系統不會再詢問這個特定檔案。
確認專案包含並使用有效的設定檔
- 請確認建構設定已在「File」>「Build Settings」中,設為您預期的目標 (iOS 或 Android)。如需更完整的討論內容,請參閱 Unity 建構設定說明文件。
- 從 Firebase 管理中心的「專案設定」>「您的應用程式」下載應用程式的設定檔 (Android 為
google-services.json
,iOS 為GoogleService-Info.plist
) 和建構目標: 如果您已有這些檔案,請在專案中刪除,然後換成最新版本,並確認檔案名稱的拼字與上文顯示的完全相同,且沒有「(1)」或其他數字。 - 如果控制台含有與
Assets/StreamingAssets/
中的檔案相關的訊息,請確認控制台訊息中沒有指出 Unity 無法編輯該處的檔案 - 確認已產生
Assets/StreamingAssets/google-services-desktop.json
,且與下載的設定檔相符。- 如果系統未自動產生,且
StreamingAssets/
不存在,請在Assets
目錄中手動建立該目錄。 - 檢查 Unity 是否已產生
google-services-desktop.json
。
- 如果系統未自動產生,且
請確保所有 Firebase 產品和 EDM4U 都是透過 .unitypackage
或 Unity Package Manager 安裝
- 請檢查
Assets/
資料夾和 Unity Package Manager,確認 Firebase SDK 和 EDM4U 是透過其中一種方法安裝。 - 部分Google 開發的外掛程式 (例如 Google Play) 和第三方外掛程式可能會依附 EDM4U。這些外掛程式可能會在
.unitypackage
或 Unity Package Manager (UPM) 套件中包含 EDM4U。確認專案中只有一個 EDM4U 副本。如有任何 UPM 套件依附於 EDM4U,建議只保留 UPM 版本的 EDM4U,這類版本可在 Google APIs for Unity 封存頁面中找到。
確保專案中的所有 Firebase 產品都使用相同版本。
- 如果 Firebase SDK 是透過
.unitypackage
安裝,請檢查Assets/Firebase/Plugins/x86_64/
底下的所有FirebaseCppApp
程式庫是否為相同版本。 - 如果 Firebase SDK 是透過 Unity Package Manager (UPM) 安裝,請依序開啟「Windows」>「Package Manager」,搜尋「Firebase」,並確認所有 Firebase 套件都使用相同版本。
- 如果專案包含不同版本的 Firebase SDK,建議您先完全移除所有 Firebase SDK,然後再次安裝所有 Firebase SDK,這次請使用相同版本。最乾淨的方法是透過這個遷移章節中提及的方法,移除所有 Firebase 套件。
解析器和目標裝置建構錯誤
如果遊戲在編輯器中運作正常 (已針對您選擇的適當建構目標進行設定),請接著確認 External Dependency Manager for Unity (EDM4U) 設定正確且運作正常。
EDM4U GitHub 存放區包含逐步指南,說明這部分程序,請先詳閱並按照指南操作,再繼續進行。
「單一 Dex」問題和縮減 (使用 Cloud Firestore 時必須)
建構 Android 應用程式時,您可能會遇到與單一 DEX 檔案相關的建構失敗問題。如果專案已設定為使用 Gradle 建構系統,錯誤訊息應如下所示:
Cannot fit requested classes in a single dex file.
.dex
檔案用於保存一組類別定義,以及 Android 應用程式的相關輔助資料。單一 DEX 檔案最多只能參照 65,536 個方法;如果專案中所有 Android 程式庫的方法總數超過這個上限,建構作業就會失敗。
您可以依序套用下列兩個步驟;只有在縮減功能無法解決問題時,才啟用 multidex。
啟用縮減功能
Unity 在 2017.2 推出縮減功能,可移除未使用的程式碼,減少單一 DEX 檔案中參照的方法總數。* 這個選項位於「Player Settings」>「Android」>「Publishing Settings」>「Minify」。 * Unity 不同版本提供的選項可能有所不同,請參閱 Unity 官方說明文件。
啟用 Multidex
如果啟用縮減功能後,參照方法數量仍超過限制,可以啟用 multidex
。在 Unity 中,有多種方法可以達成這個目標:
- 如果已啟用「Player Settings」下的「Custom Gradle Template」,請修改
mainTemplate.gradle
。 - 如果您使用 Android Studio 建構匯出的專案,請修改模組層級的 build.gradle 檔案。
詳情請參閱多重索引使用者指南。
瞭解及修正目標裝置的執行階段錯誤
如果遊戲可在編輯器中運作,且可建構並安裝至目標裝置,但您遇到執行階段錯誤,請檢查並調查裝置產生的記錄。
本節將詳細說明如何調查記錄中可能發生的錯誤,以及僅在裝置或模擬器上執行階段發生的錯誤。
Android
模擬工具
- 檢查模擬器主控台顯示的記錄,或查看 Logcat 視窗。
裝置
熟悉 adb 和 adb logcat,並瞭解如何使用。
- 雖然您可以使用指令列環境的各種工具篩選輸出內容,但建議改為查看 logcat 的選項。
如要以乾淨的狀態啟動 ADB 工作階段,最簡單的方法是:
adb logcat -c && adb logcat <OPTIONS>
其中
OPTIONS
是您傳遞至指令列的任何旗標,用於篩選輸出內容。
透過 Android Studio 使用 Logcat
透過 Android Studio 使用 Logcat 時,您可以使用其他搜尋工具,更輕鬆地產生實用的搜尋結果。
iOS
查看記錄
如果是執行實體裝置,請將裝置連接到電腦。在 Xcode 中檢查 lldb。
Swift 相關問題
如果錯誤記錄提及 Swift,請參閱「Unity 的外部依附元件管理工具」一節。
後續步驟
如果遊戲仍有與 Firebase 相關的編譯、建構或執行問題,請查看 Firebase Unity SDK 問題頁面,並考慮提出新問題。此外,請參閱 Firebase 支援頁面,瞭解其他選項。