調試遊戲建置、安裝和運行過程

介紹

以下是使用 Firebase SDK for Unity 調試 Unity 遊戲的編譯和建置過程的指南。它描述瞭如何調查和解決在為新平台配置和建立遊戲時或更新後可能遇到的許多更常見的問題。它按照流程中可能發生這些錯誤的時間順序排列。按順序諮詢它們並在每個問題解決後繼續進行。

除了本文檔之外,請參閱Firebase for Unity 常見問題以了解更多資訊。

播放模式編譯問題

在嘗試啟動行動建置之前,在編輯器中進行測試時可能會出現第一類建置問題。本部分涉及「播放模式」之前和期間發生的所有 Firebase 錯誤。

當 Unity 啟動或偵測到依賴項、程式碼或其他資產發生變更時,它將嘗試重建專案。如果專案當時無法編譯,編輯器會將編譯錯誤記錄到控制台,如果您嘗試進入播放模式,您將在 Unity 的「場景」標籤中收到一個錯誤彈出窗口,其中顯示All compiler errors have to be fixed before you can enter playmode!

缺少類型、類別、方法和成員

許多 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>'

解決步驟:
  1. 當您在程式碼中使用 Firebase 類別或方法時,請確保透過為所需的特定 Firebase 產品提供正確的using指令來使它們可用。

    1. MechaHamster 的範例:使用 Firebase 版本升級
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. 驗證您是否已匯入適當的 Firebase 套件:

    1. 若要導入適當的套件:
      1. 將 Firebase Unity SDK 新增為.unitypackage
      2. 查看並執行其他 Unity 安裝選項中的替代方案之一。
    2. 確保您的專案和EDM4U中的每個 Firebase 產品:
      • 都是同一個版本
      • 單獨安裝為.unitypackage專門透過 Unity 套件管理器安裝。
  3. 如果您已將版本「10.0.0」之前的 Firebase Unity SDK 作為.unitypackage導入,則 Firebase Unity SDK zip 檔案包含同時支援 .NET 3.x 和 .NET 4.x 的套件。確保您的專案中僅包含相容的 .NET Framework 等級:

    1. Firebase 新增至 Unity 專案中討論了 Unity 編輯器版本和 .NET Framework 層級之間的兼容性。
    2. 如果您意外地在錯誤的 .NET Framework 層級匯入了 Firebase 套件,或者需要從使用.unitypackage切換到其他 Unity 安裝選項之一,最乾淨的方法是透過本遷移部分中提到的方法刪除每個Firebase 套件,並且然後再次重新導入所有 Firebase 套件。
  4. 檢查您的編輯器是否正在重建您的項目,以及您的播放嘗試是否反映了項目的最新狀態:

    1. 預設情況下,Unity 編輯器設定為在偵測到資產或配置變更時進行重建。
    2. 此功能可能已停用,並且 Unity 編輯器設定為手動刷新/重新編譯。如果是這種情況,請調查此問題並嘗試手動刷新。

播放模式運行時錯誤

如果您的遊戲已啟動,但在運行時遇到 Firebase 問題,請嘗試以下操作:

確保您在 Mac OS 上的“安全和隱私”中批准 Firebase 捆綁包

如果在 Mac OS 上的編輯器中啟動遊戲時,系統會顯示對話框,顯示“FirebaseCppApp-<版本>.bundle 無法打開,因為無法驗證開發人員。”,您必須在Mac 的安全性和隱私選單。

為此,請點擊Apple 圖示>系統偏好設定>安全性和隱私

在安全性選單中,大約在頁面中間,有一個部分顯示“FirebaseCppApp-<version>.bundle”已被阻止使用,因為它不是來自已識別的開發人員。”

按一下標有“仍然允許”的按鈕。

c35166e224cce720.png

返回 Unity 並再次按下「播放」

然後您將看到類似於第一個的警告:

5ad9ddb0d3a52892.png

按下「開啟」 ,您的程式就可以繼續進行;系統不會再詢問您有關此特定文件的問題。

確保您的項目包含並正在使用有效的配置文件

  1. 確保在File > Build Settings中為您想要的目標(iOS 或 Android)設定了建置設定。有關更完整的討論,請閱讀Unity 建置設定文件
  2. 下載應用程式的設定檔(適用於 Android 的google-services.json或適用於 iOS 的GoogleService-Info.plist ),並從 Firebase 控制台的「專案設定」>「您的應用程式」中建立目標:如果您已有這些文件,請在項目中刪除它們並將它們替換為最新版本,確保它們的拼寫與上面顯示的完全一致,文件名中沒有附加「(1)」或其他數字。
  3. 如果控制台包含有關Assets/StreamingAssets/中文件的訊息,請確保沒有控制台訊息表明 Unity 無法編輯其中的文件
  4. 確保已產生Assets/StreamingAssets/google-services-desktop.json並與下載的設定檔相符。
    • 如果不是自動產生且StreamingAssets/不存在,請在Assets目錄下手動建立該目錄。
    • 檢查 Unity 現在是否已產生google-services-desktop.json

確保每個 Firebase 產品和EDM4U均透過.unitypackage或 Unity Package Manager 專門安裝

  1. 檢查Assets/資料夾和 Unity Package Manager,確保 Firebase SDK 和 EDM4U 是透過一種或另一種方法獨佔安裝的。
  2. 一些Google 開發的插件(例如 Google Play)和第三方插件可能依賴 EDM4U。這些插件可能在其.unitypackage或 Unity Package Manager (UPM) 套件中包含 EDM4U。確保您的專案中只有一份 EDM4U 副本。如果任何 UPM 軟體包依賴 EDM4U,最好只保留 EDM4U 的 UPM 版本,可以在Google APIs for Unity Archive 頁面上找到該版本。

確保專案中的每個 Firebase 產品都具有相同版本。

  1. 如果 Firebase SDK 是透過.unitypackage安裝的,請檢查Assets/Firebase/Plugins/x86_64/下的所有FirebaseCppApp庫是否處於相同版本。
  2. 如果 Firebase SDK 是透過 Unity Package Manager (UPM) 安裝的,請開啟Windows > Package Manager ,搜尋「Firebase」並確保所有 Firebase 軟體套件均處於相同版本。
  3. 如果您的專案包含不同版本的 Firebase SDK,我們建議您完全刪除所有 Firebase SDK,然後再次安裝所有 Firebase SDK(這次使用相同版本)。最乾淨的方法是透過本遷移部分中提到的方法刪除每個 Firebase 套件。

解析器和目標設備建置錯誤

如果您的遊戲在編輯器中執行(針對您選擇的適當建置目標進行設定),請接下來驗證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引入了Minification來剝離未使用的程式碼,這可以減少單一dex檔案中引用的方法總數。 * 此選項可在Player Settings > Android > Publishing Settings > Minify中找到。 * 不同版本的 Unity 中的選項可能有所不同,因此請參閱 Unity 官方文件。

啟用多重分包

如果啟用縮小後,引用的方法數量仍然超過限制,另一個選擇是啟用multidex 。在 Unity 中,有多種方法可以實現此目的:

  • 如果啟用了Player Settings下的Custom Gradle Template ,請修改mainTemplate.gradle
  • 如果使用Android Studio建置匯出的項目,請修改模組級build.gradle檔案。

更多詳細資訊可以在multidex 使用者指南中找到。

了解並修復目標設備運行時錯誤

如果您的遊戲在編輯器中運行並且可以為您的目標設備建置並安裝到您的目標設備,但您遇到運行時錯誤,請檢查並調查設備上產生的日誌

本節詳細介紹如何調查日誌中可能存在的錯誤以及僅在裝置或模擬器上執行時發生的此類錯誤。

安卓

模擬器

  • 檢查模擬器控制台中顯示的日誌或查看Logcat視窗。

裝置

熟悉adbadb logcat以及如何使用它們。

  • 雖然您可以使用命令列環境的各種工具來過濾輸出,但也可以考慮查看 logcat 的options
  • 從頭開始啟動 ADB 會話的簡單方法是:

    adb logcat -c && adb logcat <OPTIONS>
    

    其中OPTIONS是您透過命令列傳遞來過濾輸出的標誌。

透過 Android Studio 使用 Logcat

透過 Android Studio 使用 Logcat 時,可以使用其他搜尋工具來更簡單地產生高效搜尋。

iOS系統

檢查日誌

如果運行實體設備,請將其連接到您的電腦。在 Xcode 中檢查lldb

斯威夫特問題

如果您遇到提及 swift 的錯誤日誌,請查閱Unity 的外部依賴管理器部分。

進一步的步驟

如果您的遊戲仍然存在與 Firebase 相關的編譯、建置或執行問題,請調查Firebase SDK for Unity 問題頁面並考慮提交新問題。此外,請參閱 Firebase支援頁面以了解其他選項。