📱 Build bản chơi thử trên Android và iOS

By Ngọc Vương Trương

Ở bài trước, bạn đã hoàn thiện vòng chơi: điểm cộng dồn, màn hình game over và nút chơi lại. Giờ là lúc đưa game ra khỏi cửa sổ Unity và cầm nó trên tay. Bài này không dạy thêm gameplay, chỉ tập trung vào một việc: build đúng và chạy được trên thiết bị thật.

Bạn sẽ làm được gì sau bài này

  • Cấu hình Player Settings phù hợp cho game mobile 2D.
  • Xuất file .apk và cài lên một máy Android thật.
  • Hiểu quy trình build iOS qua Xcode và biết mình cần chuẩn bị gì.
  • Nhận ra và sửa các lỗi build phổ biến nhất của người mới.

Từ project Unity đến màn hình điện thoại

flowchart TD
  U["🎮<br/>Unity project"] --> BS["⚙️<br/>Build Settings"]
  BS --> A["🤖<br/>Android"]
  BS --> I["🍎<br/>iOS"]
  A --> APK["📦<br/>File .apk"]
  APK --> AD["📱<br/>Máy Android"]
  I --> XP["🗂️<br/>Xcode project"]
  XP --> XC["🔨<br/>Xcode"]
  XC --> IP["📱<br/>iPhone"]

Điểm khác biệt quan trọng nhất: Android cho ra file cài trực tiếp, còn iOS cho ra một project Xcode rồi Xcode mới đóng gói và cài lên máy. Vì vậy iOS luôn cần một máy macOS.

Note: Bản chơi thử (playtest build) không cần đẹp, không cần tối ưu. Nó chỉ cần cài được và chơi được để bạn và người test phát hiện lỗi.

Ví dụ dẫn đường: build bản chơi thử cho Android

Làm theo đúng thứ tự này trên project capstone của bạn.

  1. Mở scene chính của game, vào File > Build Settings, bấm Add Open Scenes để đưa scene vào danh sách build.
  2. Chọn nền tảng Android trong danh sách Platform, bấm Switch Platform và đợi Unity import lại asset.
  3. Mở Player Settings, đặt Company Name và Product Name không dấu, không khoảng trắng.
  4. Kiểm tra Bundle Identifier có dạng com.tenban.tengame.
  5. Trong Resolution and Presentation, đặt Default Orientation là Portrait (hoặc Landscape) và tắt các hướng xoay không dùng.
  6. Trong Other Settings, đặt Scripting Backend là IL2CPP và Tick ARM64 trong Target Architectures.
  7. Tick Development Build và Script Debugging để xem log khi test.
  8. Trên điện thoại, bật USB debugging trong Developer Options, cắm cáp, đổi chế độ USB sang File Transfer.
  9. Bấm Build And Run, chọn thư mục Build ở ngoài project, đặt tên file game_v01.apk.

Khi Unity build xong, game tự cài và mở trên máy. Nếu bạn chỉ muốn gửi file cho người khác test, bấm Build thay vì Build And Run, rồi gửi file .apk đó đi. Người nhận cần bật "Install unknown apps" cho ứng dụng họ dùng để mở file.

Ba giá trị cần nhớ:

  • Bundle Identifier phải theo định dạng _____, ví dụ com.tenban.tengame.
  • Kiến trúc bắt buộc cho Google Play hiện nay là _____.
  • Muốn xem log và dùng profiler trên máy thật, phải tick _____.

Bài tập nhanh 1

Bạn đặt Product Name là Game Của Tôi. Hãy đoán xem Bundle Identifier sẽ thành gì và chuyện gì xảy ra khi build.

Xem gợi ý

Unity ghép Company Name và Product Name thành Bundle Identifier, nên nó sẽ chứa khoảng trắng và chữ có dấu, ví dụ com.TenBan.Game Của Tôi. Định dạng này không hợp lệ với Android và iOS, build sẽ lỗi hoặc cài đặt thất bại.

Cách sửa: đổi Product Name thành GameCuaToi và tự đặt lại Bundle Identifier thành com.tenban.gamecuatoi. Quy tắc: chỉ chữ thường, số và dấu chấm.

Build cho iOS: cùng logic, thêm một bước

Với iOS, Unity không xuất ra file cài mà xuất ra một thư mục project Xcode. Quy trình gọn lại như sau:

  1. Trong Build Settings, chọn iOS và bấm Switch Platform.
  2. Đặt Bundle Identifier trùng với định danh bạn sẽ dùng trong Xcode.
  3. Bấm Build, chọn một thư mục riêng, ví dụ Build/iOS.
  4. Mở file .xcodeproj (hoặc .xcworkspace nếu Unity bật CocoaPods) bằng Xcode.
  5. Vào tab Signing and Capabilities, chọn Team là Apple ID của bạn.
  6. Cắm iPhone, chọn thiết bị đó làm đích, bấm nút Run.

Warning: Apple ID miễn phí chỉ ký được app dùng trong 7 ngày, sau đó app hết hạn và bạn phải build lại. Nếu chưa có tài khoản Apple Developer trả phí thì đây là giới hạn bình thường, không phải lỗi của bạn.

Nếu iPhone báo "Untrusted Developer", mở Settings > General > VPN & Device Management, chọn Apple ID của bạn và bấm Trust. Đây là bước gần như ai cũng gặp ở lần cài đầu tiên.

Bài tập nhanh 2

Bạn build APK thành công, cài lên máy, nhưng thanh điểm bị thanh tai thỏ che mất một phần và hai bên có viền đen. Bạn kiểm tra gì trước?

Xem gợi ý

Hai vấn đề khác nhau, kiểm tra theo thứ tự:

  • Viền đen: Canvas đang dùng tỉ lệ cố định. Trong Canvas Scaler, chọn Scale With Screen Size, đặt Match khoảng 0.5 để cân bằng chiều ngang và dọc.
  • Bị tai thỏ che: UI đang neo sát mép màn hình. Dùng Screen.safeArea để dịch vùng an toàn, hoặc đơn giản là đẩy thanh điểm vào trong khoảng 5% mỗi cạnh.

Mẹo kiểm tra nhanh: trong cửa sổ Game, đổi aspect ratio sang vài tỉ lệ khác nhau như 16:9 và 20:9 để thấy lỗi trước khi build.

Những lỗi build hay gặp và cách xử lý

Hiện tượng Nguyên nhân thường gặp Cách sửa
Bản build mở ra chỉ có scene trống Chưa Add Open Scenes vào Build Settings Thêm scene chính, kiểm tra nó đứng số 0
Gradle build failed Đường dẫn project có dấu tiếng Việt hoặc khoảng trắng Chuyển project ra đường dẫn không dấu, ví dụ D:\Unity\Game2D
Máy Android không hiện trong danh sách thiết bị Chưa bật USB debugging hoặc cáp chỉ sạc Bật lại Developer Options, đổi chế độ USB, thử cáp khác
Nhân vật không phản hồi chạm Logic input chỉ đúng với chuột Kiểm tra nhánh xử lý touch khi chạy trên thiết bị thật
Xcode báo lỗi signing Chưa chọn Team Chọn Apple ID trong Signing and Capabilities

Một lỗi nữa ít người nghĩ tới: nếu bạn build ra file nhưng cài lên máy khác lại báo "App not installed", rất có thể máy đó chạy Android cũ hơn Minimum API Level bạn đặt. Hạ mức này xuống một chút cho bản playtest là ổn.

Mẹo để lần build đầu không ngốn cả buổi tối

  • Build sớm, build thường xuyên. Đừng đợi game hoàn thiện mới build lần đầu. Một bản APK thô từ tuần đầu giúp bạn phát hiện lỗi hiển thị trước khi quá muộn để sửa.
  • Đặt tên file có phiên bản. game_v03.apk dễ đối chiếu hơn game.apk khi có nhiều người test.
  • Luôn giữ một thư mục Build riêng, đừng trộn với thư mục chứa asset.
  • Test trên ít nhất hai tỉ lệ màn hình, một máy 16:9 đời cũ và một máy 20:9 đời mới.
  • Không có máy Mac? Bạn vẫn làm xong phần Android trước. Phần iOS có thể nhờ dịch vụ cloud build hoặc mượn máy Mac sau, không chặn tiến độ capstone.

Ba điều đáng nhớ nhất của bài này: bản build Android là _____ cài trực tiếp, còn bản build iOS là một project _____ cần máy macOS để đóng gói. Và Bundle Identifier thì luôn phải sạch dấu.

Tổng kết và bước tiếp theo

Bạn vừa đi hết chặng đường từ project Unity đến một bản chơi thử nằm trong điện thoại: cấu hình Player Settings, chọn đúng backend và kiến trúc, build APK cho Android, và nắm được nhịp build iOS qua Xcode. Đây là kỹ năng bạn sẽ dùng lại ở mọi project sau này, không chỉ game capstone.

Bài tiếp theo là Checkpoint: hoàn thiện và đóng gói, nơi bạn đối chiếu lại toàn bộ module 2: vòng chơi đã mượt chưa, độ khó đã ổn chưa, và bản build đã sẵn sàng để người khác chơi thử một cách nghiêm túc chưa.

Front: Bundle Identifier phải theo định dạng nào? Back: Reverse-DNS, ví dụ com.tenban.tengame, chỉ gồm chữ thường, số và dấu chấm.

Front: Scripting Backend nên chọn cho bản build mobile là gì? Back: IL2CPP.

Front: Kiến trúc CPU nào bắt buộc cho Google Play hiện nay? Back: ARM64.

Front: Unity xuất ra sản phẩm gì khi build cho iOS? Back: Một project Xcode, không phải file cài trực tiếp.

Front: Muốn build iOS cần môi trường gì? Back: Máy macOS có cài Xcode.

Front: Bản build Android cài trực tiếp lên máy có đuôi gì? Back: .apk.

Front: Development Build dùng để làm gì? Back: Bật log, profiler và Script Debugging để gỡ lỗi trên thiết bị thật.

Front: Add Open Scenes trong Build Settings có tác dụng gì? Back: Đưa scene đang mở vào danh sách scene sẽ được build.

Front: Minimum API Level quyết định điều gì? Back: Phiên bản Android thấp nhất có thể cài và chạy game.

Front: Apple ID miễn phí ký app dùng được bao lâu? Back: 7 ngày, sau đó phải build và ký lại.

Front: Lỗi Gradle build failed thường do đâu với người mới? Back: Đường dẫn project chứa dấu tiếng Việt hoặc khoảng trắng.

Front: iPhone báo Untrusted Developer thì vào đâu để tin cậy? Back: Settings > General > VPN & Device Management.

Front: Đặt Default Orientation ở đâu trong Unity? Back: Player Settings > Resolution and Presentation.

Front: Keystore mặc định khi build APK dùng để làm gì? Back: Ký bản debug để test, không dùng để phát hành lên store.