U
tab 05Xuất lên điện thoại7 bài — chạm để mở
07 / 07 · 26 phút
Xuất lên điện thoại★ bài tập

Bài tập cuối: phát hành chính game đó

dự án của bạn tới lúc này▸ Arena.unity

everything from tab 01–05 · signed release build on a real phone

bài tập3–5 giờ

Bài tập cuối khoá: đưa Arena — đủ cả các đợt tấn công, kẻ địch và điều khiển cảm ứng — lên một chiếc điện thoại thật, dưới dạng bản release đã ký, giữ ổn định tốc độ khung hình suốt năm phút (60 FPS nếu máy chịu nổi, không bao giờ dưới 30), và tắt app đi mở lại vẫn nhớ tiến trình.

dùng lại những gì

Everything from tabs 01–04toàn bộ tab 01–04Android build setupcài build AndroidPlayer SettingsURP mobile qualitychất lượng URP cho mobileSave / load JSONlưu tiến trìnhadb logcatđọc log máyKeystore + .aabký số và đóng gói
sơ đồ động

Không phải ảnh chụp trong editor — mà là một icon trên điện thoại mà người khác cài được.

Phần 1 — dọn lại cảnh

  • Mở Arena.unity — cảnh bạn đã làm lớn dần từ tab 01 — và kiểm tra GameDirector còn đủ các điểm sinh quân.

  • Xoá hết đồ thừa lúc thử nghiệm: camera dư, đèn lạc, khối bị đẩy sang một bên.

  • Trong cảnh phải có đúng một AudioListener, một EventSystem và một CinemachineBrain.

  • Kiểm tra canvas cảm ứng từ tab 03 vẫn còn đó và tự bật lên khi game chạy trên điện thoại.

Phần 2 — cấu hình bản build

những thiết lập bắt buộc phải đổi
Project Settings → Player
  Company Name            your studio               // không để DefaultCompany
  Product Name            Arena
  Package Name            com.yourstudio.miniarena  // vĩnh viễn, chọn kỹ
  Version / Bundle Code   1.0.0 / 1
  Default Orientation     Landscape Left
  Scripting Backend       IL2CPP
  Target Architectures    ARMv7 + ARM64             // bắt buộc
  Minimum API Level       24
  Managed Stripping       Medium
  Graphics APIs           Vulkan, OpenGLES3         // xoá GLES2

URP Asset (mobile)
  Shadow Max Distance     40
  Cascade Count           1
  HDR                     off
  MSAA                    disabled
  Render Scale            0.85

Assets/link.xml
  preserve SaveData       // không thì stripping xoá mất
MobileBoot.cs — must exist in the first scene
void Awake()
{
    Application.targetFrameRate = 60;
    QualitySettings.vSyncCount = 0;
    Screen.sleepTimeout = SleepTimeout.NeverSleep;
    DontDestroyOnLoad(gameObject);
}

Phần 3 — bản build đầu luôn hỏng

Chuyện bình thường. Hãy build bản Development trước, cài vào máy, rồi vừa chơi vừa đọc adb logcat. Những lỗi chỉ xuất hiện trên máy thật mới là điểm chính của bài tập này.

terminal
adb devices                          #máy đã nhận chưa?
adb logcat -c && adb logcat -s Unity #xoá log rồi xem log Unity

#sau khi build xong
adb install -r Builds/arena-dev.apk
adb shell monkey -p com.yourstudio.miniarena 1

Năm lỗi gần như ai cũng dính

  • Vật liệu bị hồng — shader chưa chuyển sang URP. Chuyển material rồi build lại.

  • Nút bấm không phản hồi — thiếu EventSystem, hoặc có một Image trong suốt phủ kín màn hình ăn hết raycast.

  • File save rỗng — IL2CPP stripping đã xoá SaveData. Thêm nó vào link.xml.

  • Máy thật 20 FPS, editor 200 FPS — do bóng thời gian thực và hậu kỳ. Kiểm tra lại URP asset.

  • UI bị tai thỏ cắt mất — canvas cảm ứng thiếu SafeAreaFitter.

Phần 4 — bản phát hành

  • Tạo keystore, lưu BÊN NGOÀI dự án, sao lưu hai nơi. Mất nó là có thể không cập nhật được app nữa.

  • Thêm *.keystore vào .gitignore trước khi commit bất cứ thứ gì.

  • Bỏ tick Development Build, tick Build App Bundle, rồi build ra file .aab.

  • Giữ thêm một file .apk đã ký — đó là file bạn đưa cho bạn bè cài thử.

Khi nào thì xong

  • ✓App đã cài trên điện thoại thật, mở từ icon của chính nó chứ không phải từ Unity.
  • ✓Chỉ dùng cảm ứng mà chơi trọn một vòng: di chuyển, xoay camera, dùng cả ba skill, hạ một kẻ địch.
  • ✓Mọi phần tử UI nằm trong vùng an toàn trên máy có tai thỏ, và neo đúng để máy tính bảng không vỡ layout.
  • ✓Đưa app xuống nền, tắt hẳn, mở lại thì máu, vị trí và vàng vẫn còn.
  • ✓Chơi liên tục năm phút vẫn từ 30 FPS trở lên — đo ở phút thứ năm, không phải phút đầu.
  • ✓Chạy adb logcat -s Unity suốt một phiên chơi mà không có exception nào.
  • ✓Có file .aab đã ký, build với Development Build đã bỏ tick.
  • ✓Người khác cài file .apk của bạn lên máy họ và nó chạy được.

Con số cần đạt

Chỉ sốMục tiêuVì sao
FPS ở phút thứ 5≥ 30Máy nóng lên nên phút thứ 5 mới là con số thật.
Dung lượng .aab≤ 150 MBTrên 150 MB là Google Play bắt cấu hình phân phối phức tạp hơn.
Từ lúc mở tới lúc chơi được≤ 5 sNgười chơi đóng app nếu màn hình đen lâu hơn thế.
Bộ nhớ đang dùng≤ 600 MBCao hơn là máy 3 GB bắt đầu giết app khi bạn chuyển sang app khác.
Exception trong logcat0Một NullReference mỗi khung hình là sát thủ FPS thầm lặng.

Muốn làm thêm

thêm 1

Tải file .aab lên Play Console dạng internal test rồi cài từ Play Store về máy mình.

thêm 2

Thêm bước nhận diện cấu hình máy, hạ render scale và shadow distance với máy dưới 3 GB RAM.

thêm 3

Build cùng dự án đó cho iOS và so tốc độ khung hình trên phần cứng tương đương.

thêm 4

Thêm lớp hiển thị FPS và bộ nhớ bật tắt được, để người thử báo số liệu thật cho bạn.

Vậy là hết khoá học

  • Bạn bắt đầu từ 'biến là gì' và kết thúc bằng một bản build đã ký nằm trên điện thoại. Đó là trọn vẹn quy trình.

  • Từ đây trở đi là đào sâu chứ không phải mở rộng: hoạt ảnh tốt hơn, địch thông minh hơn, thiết kế màn chơi thật, phong cách nghệ thuật riêng.

  • Thứ nên làm tiếp là một game chỉ có một cơ chế chơi và năm phút nội dung, nhưng làm cho xong. Làm cho xong là kỹ năng hiếm nhất trong nghề này.