Bài tập cuối: phát hành chính game đó
everything from tab 01–05 · signed release build on a real phone
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ì
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
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ấtvoid 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.
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 1Nă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êu | Vì sao |
|---|---|---|
| FPS ở phút thứ 5 | ≥ 30 | Máy nóng lên nên phút thứ 5 mới là con số thật. |
| Dung lượng .aab | ≤ 150 MB | Trê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 s | Người chơi đóng app nếu màn hình đen lâu hơn thế. |
| Bộ nhớ đang dùng | ≤ 600 MB | Cao hơn là máy 3 GB bắt đầu giết app khi bạn chuyển sang app khác. |
| Exception trong logcat | 0 | Một NullReference mỗi khung hình là sát thủ FPS thầm lặng. |
Muốn làm thêm
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 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.
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 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.