Bắt đầu phát triển trò chơi trên Unity

Hướng dẫn này trình bày một chu trình phát triển trò chơi điển hình. Sau khi đọc xong, có thể bạn sẽ thấy hướng dẫn này hữu ích để sử dụng và tham khảo.

Khi bạn dùng Unity, vòng đời phát triển gồm có ba giai đoạn:

  • Lập kế hoạch và thiết kế
  • Phát triển và kiểm thử
  • Xuất bản và duy trì

Lập kế hoạch và thiết kế

Trong giai đoạn lập kế hoạch và thiết kế, bạn sẽ xác định cách xây dựng trò chơi của mình. Bạn sẽ quyết định cách giải quyết các thách thức trong quá trình phát triển cho thiết bị di động, cũng như xác định các công cụ và quy trình sẽ sử dụng trong quá trình phát triển.

Nhận ý kiến đóng góp của tất cả thành viên trong nhóm

Hãy làm việc với các nhóm minh hoạ, kỹ thuật, thiết kế, âm thanh và sản xuất để xác định và ghi nhận các nhiệm vụ cần triển khai. Ví dụ:

  • Nhóm minh hoạ có thể tạo hoạ tiết cho thành phần, cũng như kho mô hình lưới cho các nhân vật và môi trường.
  • Nhóm kỹ thuật có thể xác định các điểm kiểm tra bộ nhớ và hiệu suất để lập hồ sơ đối với từng nền tảng.
  • Nhóm thiết kế có thể lập kế hoạch phát triển cơ chế trò chơi nhằm mang lại trải nghiệm như mong muốn.
  • Các chuyên gia của nhóm âm thanh có thể đánh giá các yêu cầu về tính liên tục của âm thanh đối với các loại âm thanh trong không gian giao diện người dùng, 2D và 3D.
  • Nhóm sản xuất có thể truyền đạt các yêu cầu về việc ra mắt và giữ cho công việc của nhóm được thống nhất và theo đúng kế hoạch.

Thiết kế dành cho thiết bị di động

Trong quy trình phát triển ứng dụng cho nền tảng di động, có nhiều yếu tố cụ thể đáng cân nhắc, chẳng hạn như:

  • Nhiều tỷ lệ khung hình của màn hình
  • Mức tiêu thụ điện năng
  • Điều tiết nhiệt và bộ xử lý
  • Nhập bằng cách chạm
  • Phát triển trên nhiều nền tảng
  • Các API đồ hoạ (Vulkan hoặc OpenGL ES)

Để biết thông tin cụ thể về những yếu tố cần cân nhắc khi thiết kế cho thiết bị di động, hãy xem bài viết Phát triển Android trong Unity của Unity cũng như trên Học viện Google Play.

Phát triển và kiểm thử

Trong giai đoạn phát triển và kiểm thử, bạn sẽ xây dựng trò chơi của mình cũng như thực hiện quy trình kiểm thử và chuẩn bị trước khi phát hành. Bạn sẽ thực hiện một số quy trình kiểm thử nội bộ có giới hạn trên Google Play để chuẩn bị đáp ứng các yêu cầu đối với việc phát hành. Bạn sẽ tinh chỉnh chiến lược triển khai của mình và sắp xếp các thành phần trong Unity dựa trên hệ thống Play Asset DeliveryAddressable của Unity.

Các phần sau đây mô tả những công cụ và kỹ thuật Unity được thiết kế để giúp bạn phát triển cho Android.

Kết xuất

Kết xuất là quá trình vẽ các thành phần 3D và 2D từ cảnh của bạn trong Unity lên màn hình. Mặc dù công cụ Unity xử lý việc kết xuất hình ảnh, nhưng quan trọng là phải xem xét một số yếu tố đối với nền tảng Android.

Hoạ tiết

Dựa trên thiết bị mục tiêu của mình, hãy xác định xem bạn có cần hoạ tiết có kích thước lớn nhất hay không. Khi bạn lập hồ sơ phân bổ bộ nhớ, hãy xem xét những tài nguyên có thể tiết kiệm được nhờ thay đổi kích thước hoạ tiết mục tiêu.

Thời gian kết xuất khung hình

Để tránh hiện tượng quá nhiệt trên thiết bị Android, hãy nhắm đến giá trị thời gian kết xuất khung hình trung bình vào khoảng dưới 21 mili giây. Đôi khi (ví dụ: trong quá trình tải hoặc trong đoạn phim cắt cảnh ngắn) thời gian kết xuất khung hình của bạn có thể vượt quá 21 mili giây, nhưng bạn nên duy trì dưới ngưỡng 21 mili giây đối với trải nghiệm cốt lõi của trò chơi.

Trên nền tảng di động, chế độ buộc VSync sẽ điều tiết tốc độ khung hình nếu bạn không đạt được mục tiêu tối thiểu. Ví dụ: khi tốc độ cập nhật màn hình là 60Hz, nếu không đạt tốc độ 60 khung hình/giây, trò chơi của bạn sẽ bị điều tiết xuống còn 30; nếu không đạt 30, thì sẽ bị điều tiết xuống còn 15.

Nhiều thiết bị Android có sẵn tốc độ làm mới màn hình là 60Hz và 120Hz. Hãy cân nhắc lợi ích của việc nhắm đến thời gian kết xuất khung hình nhỏ hơn nhiều (mục tiêu 10 mili giây đối với tốc độ cập nhật 60Hz và 5 mili giây đối với 120Hz) để đạt tốc độ kết xuất hình ảnh cao hơn mà không gặp rủi ro về mức điều tiết nhiệt và tiêu hao pin.

Để thiết lập một tốc độ khung hình cụ thể trong trò chơi của bạn trong Unity, hãy sử dụng Application.targetFrameRate.

Thư viện Tốc độ khung hình (Frame Pacing library) của Android giúp việc kết xuất hình ảnh trở nên mượt mà hơn trong trường hợp ứng dụng kết xuất khung hình tiếp theo chậm hơn so với yêu cầu đối với tốc độ làm mới màn hình. Đối với các phiên bản Unity 2021 trở lên: Việc bật tốc độ khung hình trên Android sẽ đặt tốc độ làm mới màn hình thành phù hợp nhất với tốc độ khung hình mục tiêu. Điều này đảm bảo trò chơi không lãng phí pin vào những bản cập nhật màn hình không cần thiết.

Để bật thư viện này, trong phần Project Settings (Cài đặt dự án) > Player (Trình phát), trong Settings for Android (Cài đặt cho Android), hãy chọn hộp đánh dấu Optimized Frame Pacing (Tối ưu hoá tốc độ khung hình).

Hộp thoại hiển thị phần Project Settings > Player Settings > Optimized Fame Pacing (Cài đặt dự án > Cài đặt trình phát > Tối ưu hoá tốc độ khung hình)
Hình 1. Phần Optimized Frame Pacing (Tối ưu hoá tốc độ khung hình) có trong phần Player Settings (Cài đặt trình phát) trong Unity 2019.2 trở lên.

Vulkan API

Vulkan là API đồ hoạ 3D hiệu suất cao, nhiều nền tảng, có mức hao tổn tài nguyên thấp so với OpenGL ES. Unity có thể sử dụng Vulkan theo hai cách.

Auto Graphics API

Bạn có thể sử dụng Auto Graphics API với Vulkan, nhưng có thể API này sẽ có các hành vi riêng tuỳ thuộc vào phiên bản Unity bạn đã cài đặt. Bạn có thể thực hiện việc này bằng cách chọn Project Settings > Player > Rendering (Cài đặt dự án > Trình phát > Kết xuất).

Khi chọn phiên bản Unity để sử dụng, hãy ghi nhớ những điều sau:

  • Unity phiên bản 2021.1 trở về trước không hỗ trợ Vulkan dùng Auto Graphics API. Unity sẽ cố gắng sử dụng OpenGL ES 3.2. Nếu thiết bị không hỗ trợ OpenGL ES 3.2, Unity sẽ quay lại sử dụng OpenGL ES 3.1, 3.0 hoặc 2.0, theo thứ tự đó.
  • Unity phiên bản 2021.2 trở đi sử dụng Vulkan trước tiên. Nếu thiết bị không hỗ trợ Vulkan, Unity sẽ quay lại sử dụng OpenGL ES 3.2, 3.1, 3.0 hoặc 2.0.
Project Settings > Player Settings > Rendering > Auto Graphics API (Cài đặt dự án > Cài đặt trình phát > Kết xuất > Auto Graphics API)
Hình 2. Cài đặt Auto Graphics API.

API Đồ hoạ thủ công

Ngoài ra, bạn có thể bật Vulkan theo cách thủ công bằng cách tắt Auto Graphics API. Nếu bạn đang sử dụng phiên bản Unity 2021.1 trở xuống, đây là cách duy nhất để sử dụng Vulkan.

Nếu Vulkan được xếp thứ tự cao hơn OpenGL ES trong danh sách này, thì trước tiên Unity sẽ cố gắng sử dụng Vulkan. Nếu thiết bị không hỗ trợ Vulkan, Unity sẽ chạy cùng OpenGL ES. Hãy xem bài viết Làm quen với Vulkan để biết thông tin chi tiết về Vulkan trên Android, chẳng hạn như cách sử dụng các API đồ hoạ hiện đại và tối ưu hoá hiệu suất của trò chơi.

Project Settings > Player Settings > Rendering > Graphics APIs (Cài đặt dự án > Cài đặt trình phát > Kết xuất > API đồ hoạ)
Hình 3. Hãy thiết lập API đồ hoạ theo cách thủ công khi Auto Graphics API bị tắt. Vulkan là lựa chọn hàng đầu. Unity sẽ quay lại sử dụng OpenGL ES 3.0.

Hàm gọi vẽ

Mọi hình ảnh hiển thị trên màn hình đều được liên kết với một hoặc nhiều hàm gọi vẽ (draw call). Trên nền tảng di động, bạn nên tối ưu hoá và giảm số lượng hàm gọi vẽ gửi tới bộ xử lý đồ hoạ (GPU).

Hãy xem hàm gọi vẽ giống như những chiếc ô tô đang xếp hàng trước đèn tín hiệu giao thông. Sau khi đèn chuyển sang màu xanh, sẽ có một số lượng ô tô nhất định có thể đi qua trước khi đèn chuyển màu. Khi đèn chuyển sang màu vàng, bạn đã đạt mục tiêu là thời gian kết xuất khung hình lý tưởng (21 mili giây) và khi đèn chuyển sang màu đỏ, bạn đã đạt đến giới hạn thời gian kết xuất khung hình là 33 mili giây. Mọi việc diễn ra trước đó đều ảnh hưởng đến khung hình kết xuất kế tiếp, do đó tốc độ khung hình thu được sẽ thấp hơn mục tiêu 30 khung hình/giây của bạn.

Để biết thông tin về cách cải thiện hiệu suất hàm gọi vẽ trong trò chơi, hãy xem bài viết về phân nhóm trên trang Hỗ trợ của Unity.

Bóng

Ngay cả đối với các môi trường đơn giản, hàm gọi vẽ đổ bóng (shadow) có thể tiêu tốn năng lực xử lý của GPU, thời gian của GPU nhiều nhất. Để giảm mức hao tổn tài nguyên của hàm gọi vẽ đổ bóng, hãy thử nghiệm sử dụng bóng cứng thay vì bóng mềm. Nếu tình trạng hao tổn GPU quá mức vẫn tiếp diễn đối với các thiết bị cấp thấp, hãy cân nhắc sử dụng bóng mờ thay vì bóng cứng.

Hoạ tiết

Định dạng nén hoạ tiết (texture) được đề xuất cho hoạ tiết RGB và RGBA trên Android là ASTC. Trong Unity, định dạng nén hoạ tiết tối thiểu bạn nên sử dụng trên Android là ETC2. Bạn có thể quay lại sử dụng ETC2 làm định dạng dự phòng cho ASTC trong phần Unity Build Settings (Cài đặt bản dựng Unity).

Hãy xem danh sách đầy đủ các định dạng được hỗ trợ theo nền tảng trong tài liệu của Unity tại Hướng dẫn sử dụng: Các định dạng hoạ tiết nên dùng, mặc định và được hỗ trợ theo nền tảng.

Giao diện người dùng và tỷ lệ khung hình

Bạn có thể sử dụng công cụ Device Simulator (Trình mô phỏng thiết bị) của Unity để xem trước các độ phân giải, hướng và tỷ lệ khung hình khác nhau của màn hình thiết bị ngay trong Unity Editor (Trình chỉnh sửa Unity). Bạn có thể chuyển đổi giữa chế độ xem Game (Trò chơi) và chế độ xem Device Simulator (Trình mô phỏng thiết bị).

Hãy xem trước công cụ này tại trang Mô phỏng trò chơi của bạn bằng Trình mô phỏng thiết bị trong Unity!.

Hình 4. Trình mô phỏng thiết bị đang chạy Trivial Kart.

Bạn có thể tìm thấy mã nguồn của Trivial Kart trong kho lưu trữ mẫu trò chơi trên GitHub.

Trong chế độ xem Device Simulator (Trình mô phỏng thiết bị), bạn có thể nhanh chóng xác minh bố cục và tính chính xác của các thành phần Canvas trong giao diện người dùng bằng cách chọn thiết bị trong trình đơn thả xuống:

Project Settings > Player Settings > Optimized Frame Pacing (Cài đặt dự án > Cài đặt trình phát > Tối ưu hoá tốc độ khung hình)
Hình 5. Device Simulator (Trình mô phỏng thiết bị) hỗ trợ thay đổi thiết bị trong trình chỉnh sửa, nhờ đó bạn có thể phát hiện sớm các vấn đề về thiết kế.
Project Settings > Player Settings > Optimized Frame Pacing (Cài đặt dự án > Cài đặt trình phát > Tối ưu hoá tốc độ khung hình)
Hình 6. Đánh dấu chọn Enable Pre-release Packages (Bật gói bản phát hành trước) trước khi bạn tải gói Device Simulator (Trình mô phỏng thiết bị) xuống.

Để biết thêm các kỹ thuật tối ưu hoá giao diện người dùng cho Unity, hãy xem phần hướng dẫn sau của Unity: Tối ưu hoá giao diện người dùng Unity.

Vật lý

Công cụ Nvidia PhysX được tích hợp sẵn trong Unity. Chế độ cài đặt mặc định có thể tốn kém tài nguyên trên thiết bị di động, vì vậy hãy lưu ý những yếu tố đáng cân nhắc sau đây:

  • Xem xét tốc độ khung hình mục tiêu của bạn và thiết lập bước thời gian cố định sao cho phù hợp. Giá trị mặc định được thiết lập là 0,02 mili giây hay 50Hz. Bạn có thể tăng giá trị này lên 0,03 hoặc cao hơn đối với mục tiêu 30 khung hình/giây.
  • Xem xét việc đơn giản hoá các trình xử lý va chạm cho mô hình lưới và giảm thiểu Ma trận xử lý va chạm lớp (Layer Collision Matrix) để xác định tương tác giữa các đối tượng trò chơi thuộc các kiểu lớp cụ thể.

Để biết thông tin về chế độ cài đặt vật lý và quy trình tối ưu hoá cho thiết bị di động, hãy tham khảo sách điện tử Optimize Your Mobile Games (Tối ưu hoá trò chơi di động) của Unity.

Phân tích tài nguyên

Nhà phát triển ứng dụng thường xem nhẹ hoặc bỏ qua việc phân tích tài nguyên (profile) cho đến khi ứng dụng gặp phải điểm lỗi nghiêm trọng. Bạn nên sắp xếp thời gian dành riêng cho việc phân tích tài nguyên cho quy trình của mình và sử dụng các phương pháp hay nhất sau đây:

  • Xác định các điểm chính trong quy trình phát triển để có thể phân bổ thời gian phân tích tài nguyên thay vì phân bổ một cách ngẫu nhiên.
  • Lưu thông tin tóm tắt chính về phân tích tài nguyên để dùng với Unity Profile Analyzer (Trình phân tích tài nguyên Unity).
  • Phân tích tài nguyên cho trò chơi của bạn trên các thiết bị mục tiêu để có được góc nhìn chính xác về hiệu suất của trò chơi ở giai đoạn phát triển hiện tại.
  • Phân tích tài nguyên cho từng phần của trò chơi.
  • Phân tích cách người chơi tham gia chơi trò chơi. (Đừng chỉ phân tích tài nguyên cho trò chơi của bạn khi trò chơi đó đang ở trạng thái không hoạt động hoặc trên màn hình tạm dừng.)
  • Phân tích tài nguyên ở chế độ ổn định sau khi trò chơi đã chạy được một thời gian để giúp tìm ra các vấn đề về điều tiết mà bạn có thể gặp phải khi thiết bị di động bị nóng lên.

Bạn có thể sử dụng riêng hoặc kết hợp các công cụ phân tích tài nguyên sau đây.

  • Unity Profiler Unity Profiler (Trình phân tích tài nguyên Unity) là một công cụ phân tích hiệu suất được tích hợp đầy đủ, có thể chạy dựa trên mã nguồn của bạn trong Unity Editor (Trình chỉnh sửa Unity) và kết nối với thiết bị Android độc lập đang chạy các bản dựng ở chế độ phát triển.

  • Android GPU Inspector Với Android GPU Inspector (Trình kiểm tra GPU Android hay AGI) bạn có thể thực hiện gỡ lỗi ở cấp độ khung hình. AGI cũng phân tích các dịch vụ hệ thống, bao gồm GPU, CPU, bộ nhớ, pin và các bộ đếm GPU.

Để biết thông tin về cách phân tích tài nguyên cho trò chơi của bạn trong Unity, hãy xem video Giới thiệu về phân tích tài nguyên trong Unity hoặc đọc Hướng dẫn cơ bản về cách phân tích tài nguyên cho trò chơi Unity (cả hai đều của Unity).

Quản lý bộ nhớ

Các quá trình Android sẽ dùng chung bộ nhớ có thể sử dụng trên thiết bị mục tiêu. Bạn nên phân tích mức sử dụng bộ nhớ khi thiết bị kiểm thử mục tiêu có nhiều tài nguyên bộ nhớ trống. Hãy kiểm thử bộ nhớ tại một điểm nhất quán trong trò chơi của bạn để có thể so sánh các phiên hoạt động cũng như xu hướng sử dụng bộ nhớ sao cho phù hợp.

Khi xử lý các tập lệnh được viết bằng C#, hãy thận trọng với việc sử dụng chuỗi, so sánh chuỗi và phân bổ các đối tượng liên quan đến chuỗi (ví dụ: tệp JSON cho chế độ cài đặt trò chơi). Các đối tượng này thường xuyên phân bổ bộ nhớ và có thể góp phần gây ra sự phân mảnh.

Hãy cân nhắc sử dụng lớp StringBuilder đối với các trình tự lớn gồm nhiều thao tác trên chuỗi, thông qua việc nối các chuỗi tại chỗ (ví dụ: "this" + "is" + "a" + "bad" + "idea" so với các lệnh gọi hàm StringBuilder.Concat()).

Để biết thêm thông tin về chuỗi, hãy xem phần Chuỗi và văn bản trong tài liệu của Unity.

Đánh giá tài nguyên văn bản TextAsset và JSON dựa trên kiểu ScriptableObject ưu tiên. ScriptableObjects xử lý việc lưu trữ dữ liệu cho nhiều cảnh một cách hiệu quả, cũng như cho phép thay đổi khoảng thời gian từ khâu phát triển đến khi phát hành trên Google Play.

Để thảo luận về cách sử dụng các lựa chọn thay thế cho trình xử lý JSON mặc định để tối ưu hoá cho thiết bị di động, hãy xem bài viết Phương pháp tối ưu hoá ngầm trong trò chơi mạng trên Hutch.

Hãy sử dụng Memory Advice API để xác định mức sử dụng bộ nhớ của bạn trong thời gian chạy. API này sẽ hiển thị chỉ báo có màu sắc như đèn tín hiệu giao thông đối với mức sử dụng bộ nhớ cao, bình thường và thấp. Bạn có thể đăng ký chỉ báo này để cập nhật hoặc thăm dò trực tiếp để biết trạng thái hiện tại. Khi bạn nhận được tín hiệu chỉ báo có màu đỏ, hãy cân nhắc việc giảm số đối tượng trong nhóm đối tượng trò chơi hoặc giảm bộ nhớ đệm. Hãy đưa bối cảnh này quy trình đo lường từ xa đối với trò chơi của bạn trong quá trình vận hành trực tiếp, đồng thời xem xét các chỉ số hiệu suất sau khi ra mắt.

Để tìm hiểu chuyên sâu hơn về cách tổ chức bộ nhớ trên thiết bị Android cũng như cách Unity xử lý điều này, hãy xem video Tìm hiểu về mức sử dụng bộ nhớ Android (trong Google I/O '18). Video này có đề cập đến các loại vấn đề về bộ nhớ và thời điểm mà cơ chế đóng các hoạt động để tạo thêm bộ nhớ trống phát huy tác dụng.

Thu gom rác

Quy trình thu gom rác (garbage collection) trong môi trường bộ nhớ được quản lý sẽ dọn dẹp những mảnh bộ nhớ không dùng đến (có thể được tái chế cho một ứng dụng). Hãy làm theo các phương pháp hay nhất về thu gom rác để tránh phân bổ tài nguyên bộ nhớ một cách không cần thiết.

Ví dụ: hãy tạo nhóm đối tượng trò chơi thay vì sử dụng cơ chế phân bổ theo yêu cầu (GameObject.Instantiate). Đối với các nhóm lớn, hãy cân nhắc việc phân bổ trên nhiều khung hình để giảm nguy cơ trò chơi của bạn không phản hồi trên các thiết bị Android cấp thấp.

Hãy xem đoạn mã sau đây đối với một coroutine đơn giản được gọi từ điểm bắt đầu của MonoBehaviour:

// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
  while (enabled) {
    yield return new WaitForSeconds(1.0f);
    // Some intermittent function check
  }
}

// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
  while (enabled) {
    yield return waitForSecond;
    // Some other intermittent function
  }
}

Bạn có thể chỉnh sửa tệp mẫu MonoBehaviour để xoá Start() mặc định và các hàm mã giả lập Update() để bạn không vô tình để lại các hàm trống trong quá trình phát triển mã.

Để biết thông tin tổng quan về thứ tự thực hiện các sự kiện MonoBehaviour, hãy xem Thứ tự thực hiện các hàm sự kiện trong tài liệu của Unity. Để tìm hiểu thêm về việc quản lý bộ nhớ, hãy tham khảo khoá học Quản lý bộ nhớ trong Unity.

Để biết các mẹo tối ưu hoá hiệu suất trò chơi di động, hãy xem nội dung Tối ưu hoá hiệu suất trò chơi di động: Mẹo phân tích tài nguyên, bộ nhớ và cấu trúc mã theo các kỹ sư hàng đầu của Unity.

Gộp Prefab

Hiện tượng thời gian kết xuất khung hình của CPU tăng đột biến hầu như đều là do quá trình tạo thực thể Prefab trong quá trình chơi. Hãy cân nhắc việc gộp nhóm trước đối với đạn, kẻ địch có thể xuất hiện, cũng như các hiệu ứng hình ảnh trước khi bước vào trò chơi để giảm hoặc loại bỏ mức tăng đột biến của CPU khi khởi động. Bạn có thể mở rộng thêm các chế độ tối ưu hoá trên nhiều "lượt khởi tạo khung hình" trong quá trình tải hoặc giới thiệu cảnh theo trình tự.

Bạn có thể tìm thấy nhiều thành phần gộp của bên thứ ba trên Unity Asset Store (Cửa hàng thành phần Unity) liên quan đến việc quản lý quy trình gộp các đối tượng trong trò chơi. Bạn cũng có thể tự tạo loại riêng. Xem Giới thiệu về việc gộp đối tượng trên Unity Learn.

Phân phối thành phần

Có những giới hạn về kích thước đối với ứng dụng của bạn khi được triển khai lần đầu lên Google Play. Tuỳ thuộc vào quy mô và tính chất của trò chơi, có thể bạn sẽ cần một số hoặc tất cả tài nguyên trò chơi của mình (mô hình nhân vật, môi trường, thành phần giao diện người dùng, v.v.) để người chơi có được trải nghiệm như bạn mong muốn.

Bạn có thể sử dụng dịch vụ Play Asset Delivery (PAD) để quản lý các thành phần cần thiết cho trò chơi của bạn tại thời điểm cài đặt, theo dõi nhanh hoặc phân phối theo yêu cầu. Unity Asset Bundles (Gói thành phần Unity) được tích hợp để hỗ trợ PAD, đồng thời bạn cũng có thể sử dụng công cụ này để chỉ định thành phần nào sẽ được phân phối.

Addressable

Việc thiết lập tài nguyên động (ví dụ: prefab, hoạ tiết, và tệp âm thanh) trong thời gian chạy sẽ không còn khó thực hiện nếu bạn chuẩn bị và xem xét về hệ thống đặt tên Addressable (thành phần có thể định địa chỉ). Các thành phần Addressable sẽ tách riêng cách bạn sắp xếp nội dung với cách bạn xây dựng và tải nội dung của mình. Hệ thống Addressable sẽ thay thế thư mục Resources (Tài nguyên) và Asset Bundles (Gói thành phần) để đơn giản hoá cách bạn tham chiếu các thành phần và tải chúng trong thời gian chạy.

Để xem ví dụ, hãy tham khảo Dự án minh hoạ sử dụng gói Addressable trên GitHub. Để biết chi tiết về quá trình phát triển của Addressable, hãy tham khảo Hệ thống thành phần Addressable trên Unity Blog.

Đối với bố cục thành phần Addressable, sẽ có những ưu điểm và nhược điểm khi nhóm quá ít hoặc quá nhiều thành phần vào các gói chung. Để tìm hiểu thêm về việc quản lý nội dung bằng Addressable, hãy xem bài viết Đơn giản hoá việc quản lý nội dung bằng Addressable.

Bạn có thể thiết lập bản minh hoạ độc lập và thử nghiệm các chế độ truy cập để làm quen với hệ thống Addressable. Bạn cũng có thể xem dự án nguồn mở Trình khám phá BuildLayout dành cho Unity 2019.3 trở lên, đồng thời kiểm tra báo cáo buildlayout.txt do Addressable tạo.

Các thành phần cho Chop Chop (một Dự án mở của Unity) được đóng gói bằng hệ thống Addressable cho tất cả quá trình tải và huỷ tải. Xem Đóng gói nội dung bằng thành phần Addressable | Mở nhật ký phát triển của dự án để xem hướng dẫn từng bước về cấu trúc và thiết lập cách định cấu hình các gói Addressable.

Trong dự án Chop Chop, cảnh duy nhất được tải theo mặc định (cảnh Khởi tạo) được định cấu hình để sử dụng AssetReferences thay vì đường liên kết trực tiếp đến các thành phần trong dự án (cảnh, prefab, v.v.).

Mã nguồn của Dự án mở của Unity: Chop Chop có trên GitHub. Mặc dù dự án này không còn được phát triển nữa nhưng kho git và tài liệu vẫn còn đó.

Trình bổ trợ của bên thứ ba

Nếu bạn sử dụng trình bổ trợ của bên thứ ba (ví dụ: các trình bổ trợ trong Unity Asset Store), hãy đảm bảo bạn xem lại các thư mục và xoá những thành phần không cần thiết khỏi thư mục Resources (Tài nguyên). Trong quá trình tạo bản dựng, Unity sẽ thu thập tất cả thành phần có trong thư mục Resources (Tài nguyên) và đóng gói các thành phần đó trong một gói duy nhất có thể truy cập được trong thời gian chạy. Điều này có thể làm cho gói sau cùng trở nên cồng kềnh hơn và thường là không cần thiết.

Để nhanh chóng xác định vị trí tất cả các thư mục tài nguyên, hãy tìm kiếm Resources (Tài nguyên) trong bảng Project (Dự án). Sau đó, bạn có thể chọn từng thư mục để xác định nội dung trong đó và liệu nội dung đó có cần thiết cho trò chơi của bạn hay không.

Hình 7. Có thể có nhiều thư mục Resources (Tài nguyên) ẩn trong các thư mục được tải xuống qua Unity Asset Store. Hãy dọn dẹp các thư mục đó để tránh việc chúng bị đóng gói trong gói ứng dụng của bạn.

Xuất bản và duy trì

Khi bạn đã sẵn sàng ra mắt trò chơi di động của mình, hãy quyết định xem bạn muốn phát hành cho đối tượng nào, cách kiểm thử alpha và beta, cũng như cách giám sát và theo dõi hiệu suất sau khi ra mắt.

Phân tích ý kiến phản hồi từ bản phát hành giới hạn

Bạn có thể ra mắt cho một đối tượng giới hạn mà mình nhắm đến và triển khai thử nghiệm beta quy mô lớn hơn hoặc kích hoạt trò chơi của mình để ra mắt hoàn toàn ở tất cả thị trường. Với bản phát hành giới hạn, bạn có thể điều chỉnh hiệu suất ứng dụng của mình dựa trên nhóm đối tượng trực tiếp và tập hợp thiết bị rộng hơn.

Ví dụ: bạn có thể sử dụng Android Performance Tuner dành cho UnityGoogle Analytics dành cho Unity để hiểu rõ hơn về hiệu suất ứng dụng của mình, cũng như xu hướng của người chơi, từ đó nhóm phát triển của bạn có thể điều chỉnh và đưa ra các bản cập nhật. Bạn cũng có thể sử dụng dữ liệu phân tích của mình để lên kế hoạch cho phần tiếp theo hoặc trò chơi có liên quan thuộc thể loại tương tự.

Thử nghiệm alpha và beta

Sau khi thiết lập hồ sơ ứng dụng của mình trong Google Play Console, bạn có thể chuẩn bị các bản thử nghiệm alpha và beta công khai, cũng như phân phối các bản thử nghiệm đó cho một lượng đối tượng hạn chế để xem xét trước khi ra mắt. Bằng cách ra mắt cho một lượng đối tượng hạn chế, bạn có thể giải quyết mọi vấn đề sau cùng trên nhóm thiết bị lớn hơn, cũng như thu thập và trả lời những ý kiến phản hồi ban đầu trước khi phát hành chính thức trên toàn cầu.

Các bản dựng Unity sẽ được phân phối thông qua Android App Bundle. Để biết thông tin, hãy xem Hướng dẫn: Phân phối tới Google Play của Unity, tài liệu này cũng mô tả những thay đổi từ tệp APK sang định dạng AAB.

Giám sát và theo dõi

Trong giai đoạn LiveOps và phân phối trò chơi, bạn có thể sử dụng Android Vitals để giúp theo dõi các vấn đề về hiệu suất trên những thiết bị mà có thể bạn sẽ không truy cập được trong quá trình phát triển và kiểm thử. Để biết thông tin, hãy xem video Tính năng mới dành cho trò chơi trong phần Phạm vi tiếp cận và thiết bị cũng như Android Vitals.

Thông thường, các nhóm phát triển lớn sẽ có những quy trình đo lường từ xa tuỳ chỉnh và độc đáo cho trò chơi nhằm cung cấp các chỉ số liên quan đến hiệu suất thiết bị. Hãy nhớ tận dụng Android Performance Tuner (APT) và trình bổ trợ Unity tương ứng để truy cập các số liệu liên quan đến tốc độ khung hình, độ trung thực đồ hoạ, thời gian tải và tỷ lệ tải không thành công. Làm theo hướng dẫn từng bước trong nội dung Tích hợp Android Performance Tuner vào trò chơi Unity của bạn.

Sau khi đi vào hoạt động chính thức, vòng đời của trò chơi vẫn chưa dừng lại. Việc giám sát, duy trì, cũng như xử lý các vấn đề về hiệu suất và trả lời ý kiến phản hồi cũng rất quan trọng để khiến người dùng hài lòng, đánh giá tích cực và rốt cuộc là đón nhận trò chơi của bạn trên tất cả thị trường.