Gỡ lỗi quá trình xây dựng, cài đặt và chạy trò chơi

Giới thiệu

Sau đây là hướng dẫn gỡ lỗi quy trình biên dịch và xây dựng cho trò chơi Unity bằng cách sử dụng SDK Firebase cho Unity. Nó mô tả cách điều tra và giải quyết nhiều vấn đề phổ biến hơn mà bạn có thể gặp phải trong khi định cấu hình và xây dựng trò chơi của mình cho nền tảng mới hoặc sau khi cập nhật. Nó được sắp xếp theo thứ tự khi các lỗi này có thể xảy ra trong quy trình. Tham khảo ý kiến ​​​​của họ theo thứ tự và tiến hành khi từng vấn đề được giải quyết.

Ngoài tài liệu này, hãy tham khảo Câu hỏi thường gặp về Firebase dành cho Unity để biết thêm thông tin.

Sự cố biên dịch Chế độ chơi

Loại sự cố bản dựng đầu tiên có thể xảy ra khi thử nghiệm trong trình chỉnh sửa trước khi bạn thử bắt đầu bản dựng dành cho thiết bị di động. Phần này liên quan đến tất cả các lỗi Firebase xảy ra trước và trong Chế độ phát.

Khi Unity bắt đầu hoặc phát hiện các thay đổi đối với phần phụ thuộc, mã hoặc các nội dung khác, nó sẽ cố gắng xây dựng lại dự án. Nếu dự án không thể biên dịch tại thời điểm đó, trình chỉnh sửa sẽ ghi lại các lỗi biên dịch vào bảng điều khiển và nếu bạn cố gắng vào Chế độ phát, bạn sẽ nhận được một lỗi bật lên trong tab Cảnh của Unity có nội dung All compiler errors have to be fixed before you can enter playmode! .

Thiếu loại, lớp, phương thức và thành viên

Nhiều sự cố Firebase xảy ra do trình soạn thảo và trình biên dịch không thể tìm thấy các loại, lớp, phương thức và thành viên cần thiết. Các triệu chứng phổ biến của điều này là các biến thể sau:

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

Các bước giải quyết:
  1. Khi bạn đang sử dụng các lớp hoặc phương thức Firebase trong mã, hãy đảm bảo rằng bạn đang cung cấp chúng bằng cách sử dụng các lệnh using chính xác cho các sản phẩm Firebase cụ thể cần thiết.

    1. Ví dụ từ MechaHamster: Lên cấp với phiên bản Firebase :
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Xác minh rằng bạn đã nhập các gói Firebase thích hợp:

    1. Để nhập các gói thích hợp:
      1. Thêm Firebase Unity SDK dưới dạng .unitypackage s hoặc
      2. Xem xét và thực hiện một trong các lựa chọn thay thế trong các tùy chọn cài đặt Unity bổ sung .
    2. Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn và EDM4U :
      • Đang ở cùng một phiên bản
      • Đã được cài đặt dưới dạng .unitypackage s độc quyền HOẶC độc quyền thông qua Trình quản lý gói Unity.
  3. Nếu bạn đã nhập SDK Unity của Firebase trước phiên bản "10.0.0" dưới dạng .unitypackage s, kho lưu trữ zip Firebase Unity SDK chứa các gói hỗ trợ cả .NET 3.x và .NET 4.x. Đảm bảo rằng bạn chỉ đưa mức .NET Framework tương thích vào dự án của mình:

    1. Khả năng tương thích giữa các phiên bản của Unity Editor và .NET Framework Các cấp độ được thảo luận trong Thêm Firebase vào dự án Unity của bạn .
    2. Nếu bạn vô tình nhập sai gói Firebase của mình ở Cấp độ .NET Framework hoặc cần chuyển từ sử dụng .unitypackage s sang một trong các tùy chọn cài đặt Unity bổ sung , thì cách tốt nhất là xóa mọi gói Firebase thông qua các phương pháp được đề cập trong phần di chuyển này và sau đó nhập lại tất cả các gói Firebase.
  4. Kiểm tra xem trình chỉnh sửa của bạn có đang xây dựng lại dự án của bạn không và những nỗ lực phát của bạn có phản ánh trạng thái mới nhất của dự án không:

    1. Theo mặc định, trình chỉnh sửa Unity được đặt để xây dựng lại bất cứ khi nào phát hiện thay đổi nội dung hoặc cấu hình.
    2. Có thể chức năng này đã bị tắt và Unity Editor được đặt thành làm mới/biên dịch lại thủ công . Hãy điều tra vấn đề này và thử làm mới thủ công nếu trường hợp này xảy ra.

Lỗi thời gian chạy Chế độ chơi

Nếu trò chơi của bạn bắt đầu nhưng gặp sự cố với Firebase trong khi chạy, hãy thử các cách sau:

Đảm bảo rằng bạn phê duyệt các gói Firebase trong "Bảo mật và quyền riêng tư" trên Mac OS

Nếu khi khởi động trò chơi của bạn trong trình chỉnh sửa trên Mac OS, bạn sẽ thấy một hộp thoại có nội dung "Không thể mở FirebaseCppApp-<version>.bundle vì không thể xác minh nhà phát triển.", thì bạn phải phê duyệt tệp gói cụ thể đó trong Menu Bảo mật & Quyền riêng tư của Mac.

Để làm như vậy, hãy nhấp vào Biểu tượng Apple > Tùy chọn hệ thống > Bảo mật & quyền riêng tư

Trong menu bảo mật, ở khoảng nửa trang, có một phần có nội dung ""FirebaseCppApp-<version>.bundle" đã bị chặn sử dụng vì ứng dụng không phải của nhà phát triển đã xác định."

Nhấp vào nút có nhãn Allow Anyway .

c35166e224cce720.png

Quay lại Unity và nhấn Play lần nữa.

Sau đó, bạn sẽ thấy một cảnh báo tương tự như cảnh báo đầu tiên:

5ad9ddb0d3a52892.png

Nhấn Open và chương trình của bạn sẽ có thể tiếp tục; bạn sẽ không bị hỏi về tệp cụ thể này nữa.

Đảm bảo dự án của bạn chứa và đang sử dụng các tệp cấu hình hợp lệ

  1. Đảm bảo cài đặt bản dựng của bạn được đặt cho mục tiêu bạn dự định (iOS hoặc Android) trong Tệp > Cài đặt bản dựng . Để có một cuộc thảo luận đầy đủ hơn, hãy đọc Tài liệu cài đặt bản dựng Unity .
  2. Tải xuống tệp cấu hình cho ứng dụng của bạn ( google-services.json cho Android hoặc GoogleService-Info.plist cho iOS) và tạo mục tiêu từ bảng điều khiển Firebase trong Cài đặt dự án > Ứng dụng của bạn : Nếu bạn đã có những tệp này, hãy xóa chúng trong dự án của bạn và thay thế chúng bằng phiên bản mới nhất, đảm bảo rằng chúng được đánh vần chính xác như hiển thị ở trên mà không có "(1)" hoặc các số khác đi kèm với tên tệp.
  3. Nếu bảng điều khiển chứa thông báo liên quan đến tệp trong Assets/StreamingAssets/ , hãy đảm bảo không có thông báo bảng điều khiển nào nói rằng Unity không thể chỉnh sửa tệp ở đó
  4. Đảm bảo rằng Assets/StreamingAssets/google-services-desktop.json được tạo và khớp với tệp cấu hình đã tải xuống.
    • Nếu nó không được tạo tự động và StreamingAssets/ không tồn tại, hãy tạo thủ công thư mục trong thư mục Assets .
    • Kiểm tra xem Unity hiện đã tạo google-services-desktop.json chưa.

Đảm bảo rằng mọi sản phẩm Firebase và EDM4U đều được cài đặt độc quyền thông qua .unitypackage hoặc Unity Package Manager

  1. Kiểm tra cả thư mục Assets/ và Trình quản lý gói Unity để đảm bảo rằng SDK Firebase và EDM4U đã được cài đặt thông qua một hoặc phương pháp khác.
  2. Một số plugin do Google phát triển , chẳng hạn như Google Play và plugin của bên thứ ba có thể phụ thuộc vào EDM4U. Các phần bổ trợ đó có thể bao gồm EDM4U trong các gói .unitypackage s hoặc Unity Package Manager (UPM) của chúng. Đảm bảo chỉ có một bản sao EDM4U trong dự án của bạn. Nếu bất kỳ gói UPM nào phụ thuộc vào EDM4U, tốt nhất là chỉ giữ lại các phiên bản UPM của EDM4U, có thể tìm thấy trên trang Google APIs for Unity Archive .

Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn đều ở cùng một phiên bản.

  1. Nếu SDK Firebase đã được cài đặt thông qua .unitypackage , hãy kiểm tra xem tất cả thư viện FirebaseCppApp trong Assets/Firebase/Plugins/x86_64/ có cùng phiên bản hay không.
  2. Nếu SDK Firebase đã được cài đặt thông qua Trình quản lý gói Unity (UPM), hãy mở Windows > Trình quản lý gói , tìm kiếm "Firebase" và đảm bảo rằng tất cả các gói Firebase đều có cùng một phiên bản.
  3. Nếu dự án của bạn chứa các phiên bản SDK Firebase khác nhau, chúng tôi khuyên bạn nên xóa hoàn toàn tất cả SDK Firebase trước khi cài đặt lại tất cả SDK Firebase, lần này với cùng phiên bản. Cách rõ ràng nhất là xóa mọi gói Firebase thông qua các phương pháp được đề cập trong phần di chuyển này .

Trình giải quyết và lỗi xây dựng thiết bị đích

Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa (được định cấu hình cho mục tiêu xây dựng phù hợp mà bạn chọn), tiếp theo hãy xác minh rằng Trình quản lý phụ thuộc bên ngoài cho Unity (EDM4U) được định cấu hình và hoạt động đúng cách.

Kho lưu trữ EDM4U GitHub chứa hướng dẫn từng bước cho phần này của quy trình mà bạn nên xem lại và làm theo trước khi tiếp tục.

Sự cố và thu nhỏ 'Single Dex' ( Bắt buộc nếu sử dụng Cloud Firestore)

Trong khi xây dựng ứng dụng Android, bạn có thể gặp phải lỗi xây dựng liên quan đến việc có một tệp dex. Thông báo lỗi trông giống như sau (nếu dự án của bạn được cấu hình để sử dụng hệ thống xây dựng Gradle):

Cannot fit requested classes in a single dex file.

Các tệp .dex được sử dụng để chứa một tập hợp các định nghĩa lớp và dữ liệu bổ sung được liên kết của chúng cho các ứng dụng Android. Một tệp dex duy nhất được giới hạn để tham chiếu tới 65.536 phương thức; bản dựng sẽ không thành công nếu tổng số phương thức từ tất cả các thư viện Android trong dự án của bạn vượt quá giới hạn này.

Có thể áp dụng tuần tự hai bước sau; chỉ bật multidex nếu quá trình thu nhỏ không giải quyết được sự cố.

Kích hoạt thu nhỏ

Unity đã giới thiệu Minification vào năm 2017.2 để loại bỏ mã không sử dụng, có thể giảm tổng số phương thức được tham chiếu trong một tệp dex. * Bạn có thể tìm thấy tùy chọn này trong Cài đặt trình phát > Android > Cài đặt xuất bản > Thu nhỏ . * Các tùy chọn có thể khác nhau trong các phiên bản Unity khác nhau, vì vậy hãy tham khảo tài liệu chính thức của Unity.

Kích hoạt Multidex

Nếu sau khi bật tính năng thu nhỏ, số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, thì một tùy chọn khác là bật multidex . Có nhiều cách để đạt được điều này trong Unity:

  • Nếu Mẫu lớp tùy chỉnh trong Cài đặt trình phát được bật, hãy sửa đổi mainTemplate.gradle .
  • Nếu bạn sử dụng Android Studio để xây dựng dự án đã xuất, hãy sửa đổi tệp build.gradle cấp mô-đun.

Bạn có thể tìm thêm chi tiết trong hướng dẫn sử dụng multidex .

Hiểu và sửa lỗi thời gian chạy của thiết bị đích

Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa và có thể được tạo và cài đặt cho thiết bị mục tiêu của bạn, nhưng bạn gặp phải lỗi thời gian chạy, hãy kiểm tra và điều tra các nhật ký được tạo trên thiết bị .

Phần này trình bày chi tiết cách điều tra nhật ký của bạn để tìm các lỗi có thể xảy ra và một lỗi như vậy chỉ xảy ra trong thời gian chạy trên thiết bị hoặc trình mô phỏng.

Android

Giả lập

  • Kiểm tra nhật ký được hiển thị trong bảng điều khiển Trình mô phỏng của bạn hoặc xem cửa sổ Logcat .

Thiết bị

Làm quen với adbadb logcat và cách sử dụng chúng.

  • Mặc dù bạn có thể sử dụng các công cụ khác nhau trong môi trường dòng lệnh của mình để lọc đầu ra, nhưng hãy cân nhắc xem xét các tùy chọn của logcat.
  • Một cách đơn giản để bắt đầu một phiên làm việc của ADB với một phương tiện rõ ràng là:

    adb logcat -c && adb logcat <OPTIONS>
    

    trong đó OPTIONS là bất kỳ cờ nào bạn chuyển dòng lệnh để lọc đầu ra.

Sử dụng Logcat thông qua Android Studio

Khi sử dụng Logcat thông qua Android Studio , các công cụ tìm kiếm bổ sung có sẵn giúp việc tạo các tìm kiếm hiệu quả trở nên đơn giản hơn.

iOS

Kiểm tra nhật ký

Nếu chạy một thiết bị vật lý, hãy gắn nó vào máy tính của bạn. Kiểm tra lldb trong Xcode.

Sự cố Swift

Nếu bạn gặp phải nhật ký lỗi đề cập đến swift, hãy tham khảo phần Trình quản lý phụ thuộc bên ngoài cho Unity về chúng.

Các bước tiếp theo

Nếu trò chơi của bạn vẫn gặp sự cố biên dịch, xây dựng hoặc chạy liên quan đến Firebase, hãy điều tra trang vấn đề về Firebase SDK dành cho Unity và cân nhắc gửi một vấn đề mới. Ngoài ra, hãy tham khảo trang hỗ trợ Firebase để tìm hiểu về các tùy chọn bổ sung.