
Cấu hình dự án Unity của bạn để đạt hiệu suất cao hơn
Trang web này đã được dịch bằng máy để thuận tiện cho bạn. Chúng tôi không thể đảm bảo tính chính xác hoặc độ tin cậy của nội dung được dịch. Nếu bạn có thắc mắc về tính chính xác của nội dung được dịch, vui lòng tham khảo phiên bản tiếng Anh chính thức của trang web.
Đây là bài viết đầu tiên trong loạt bài hướng dẫn tối ưu hóa dự án Unity của bạn. Hãy sử dụng chúng như một hướng dẫn để chạy ở tốc độ khung hình cao hơn với ít tài nguyên hơn. Sau khi đã thử áp dụng những phương pháp tốt nhất này, hãy nhớ xem thêm các trang khác trong loạt bài này:
- Tối ưu hóa hiệu năng cho đồ họa cao cấp
- Quản lý mức sử dụng GPU cho game PC và console
- Lập trình nâng cao và kiến trúc mã
- Hiệu năng vật lý được nâng cao mang lại trải nghiệm chơi game mượt mà hơn.
Xem các hướng dẫn tối ưu hóa mới nhất của chúng tôi dành cho nhà phát triển và nghệ sĩ Unity 6:
Cấu hình dự án của bạn để đạt hiệu suất cao hơn
Một quy trình xử lý tài nguyên được tối ưu hóa tốt có thể tăng tốc thời gian tải, giảm mức sử dụng bộ nhớ và cải thiện hiệu suất hoạt động. Bằng cách hợp tác với một nghệ sĩ kỹ thuật giàu kinh nghiệm, nhóm của bạn có thể xác định và thực thi các định dạng tài nguyên , thông số kỹ thuật và cài đặt nhập khẩu để đảm bảo quy trình làm việc hiệu quả và thông suốt.
Đừng chỉ dựa vào cài đặt mặc định. Hãy tận dụng tab ghi đè dành riêng cho nền tảng để tối ưu hóa các tài nguyên như kết cấu, hình học lưới và tệp âm thanh. Cài đặt không chính xác có thể dẫn đến kích thước bản dựng lớn hơn, thời gian biên dịch lâu hơn và sử dụng bộ nhớ kém hiệu quả.
Hãy cân nhắc sử dụng các thiết lập sẵn (Presets) để thiết lập các cài đặt cơ bản phù hợp với nhu cầu cụ thể của dự án của bạn. Cách tiếp cận chủ động này giúp đảm bảo rằng các tài sản được tối ưu hóa ngay từ đầu, dẫn đến hiệu suất tốt hơn và trải nghiệm nhất quán hơn trên tất cả các nền tảng.
Để được hướng dẫn thêm, hãy tham khảo các phương pháp tốt nhất cho tài sản đồ họa 3D hoặc tìm hiểu khóa học Tối ưu hóa đồ họa 3D cho ứng dụng di động trên Unity Learn. Những nguồn tài liệu này cung cấp những hiểu biết giá trị có thể giúp bạn đưa ra quyết định sáng suốt về tối ưu hóa tài nguyên cho các ứng dụng web, di động và XR được xây dựng Unity .

BA LOẠI BẢN ĐỒ KHI ĐÓNG GÓI CÁC HÌNH ẢNH 2D TRONG UNITY
Tắt các cài đặt Trình phát hoặc Chất lượng không cần thiết
Trong phần cài đặt Trình phát , hãy tắt API Đồ họa Tự động cho các nền tảng không được hỗ trợ để tránh tạo ra quá nhiều biến thể shader. Hãy tắt tùy chọn Kiến trúc mục tiêu cho các CPU cũ hơn nếu ứng dụng của bạn không hỗ trợ chúng.
Trong phần cài đặt Chất lượng , hãy tắt các mức chất lượng không cần thiết.
Tìm hiểu thêm về API đồ họa .

TRONG PHẦN CÀI ĐẶT CHẤT LƯỢNG, HÃY TẮT CÁC MỨC CHẤT LƯỢNG KHÔNG CẦN THIẾT.
Chuyển sang IL2CPP
Việc chuyển đổi phần xử lý kịch bản từ Mono sang IL2CPP (Intermediate Language to C++) có thể mang lại hiệu suất hoạt động tổng thể tốt hơn. Tuy nhiên, điều này cũng có thể làm tăng thời gian xây dựng. Một số nhà phát triển thích sử dụng Mono cục bộ để lặp lại nhanh hơn, sau đó chuyển sang IL2CPP cho máy chủ biên dịch và/hoặc các bản phát hành thử nghiệm. Hãy tham khảo tài liệu "Tối ưu hóa thời gian biên dịch IL2CPP" để biết thêm thông tin về cách giảm thời gian biên dịch.
Ghi chú : Bằng cách sử dụng tùy chọn này, Unity sẽ chuyển đổi mã IL từ các tập lệnh và assembly sang C++ trước khi tạo tệp nhị phân gốc (.exe, .apk, .xap) cho nền tảng mục tiêu của bạn.
Hãy xem phần Giới thiệu về các thành phần nội bộ của IL2CPP hoặc tham khảo trang hướng dẫn về các tùy chọn trình biên dịch để tìm hiểu cách các tùy chọn trình biên dịch khác nhau ảnh hưởng đến hiệu năng khi chạy.
Chọn tốc độ khung hình phù hợp
Các dự án di động phải cân bằng giữa tốc độ khung hình với thời lượng pin và hiện tượng giảm hiệu năng do quá nhiệt. Thay vì cố gắng tối đa hóa hiệu năng thiết bị ở tốc độ 60 khung hình/giây, hãy cân nhắc chạy ở tốc độ 30 khung hình/giây như một sự thỏa hiệp. Unity mặc định tốc độ khung hình là 30 fps cho thiết bị di động.
Khi nhắm mục tiêu vào các nền tảng XR , các yếu tố về tốc độ khung hình thậm chí còn quan trọng hơn. Tốc độ khung hình 72 fps, 90 fps, hoặc thậm chí 120 fps thường là cần thiết để duy trì trải nghiệm nhập vai và ngăn ngừa chứng say chuyển động. Tốc độ khung hình cao hơn này giúp đảm bảo trải nghiệm mượt mà và phản hồi nhanh, điều rất quan trọng đối với sự thoải mái trong môi trường thực tế ảo. Tuy nhiên, chúng cũng đi kèm với những thách thức riêng về mức tiêu thụ điện năng và quản lý nhiệt, đặc biệt là đối với các thiết bị VR độc lập.
Việc lựa chọn tốc độ khung hình phù hợp phụ thuộc vào việc hiểu rõ các yêu cầu và hạn chế cụ thể của nền tảng mục tiêu, cho dù đó là thiết bị di động, tai nghe VR độc lập hay thiết bị AR. Bằng cách lựa chọn tốc độ khung hình phù hợp một cách cẩn thận, bạn có thể tối ưu hóa cả hiệu năng và trải nghiệm người dùng trên các nền tảng khác nhau.
Bạn cũng có thể điều chỉnh tốc độ khung hình một cách linh hoạt trong quá trình chạy bằng Application.targetFrameRate . Ví dụ, bạn có thể giảm tốc độ khung hình xuống dưới 30 fps đối với các cảnh chậm hoặc tương đối tĩnh và dành cài đặt fps cao hơn cho việc chơi game.
Bạn có thể tìm thêm thông tin trong tài liệu hướng dẫn .
Giảm hoặc tắt tần số gia tốc kế
Unity thu thập dữ liệu gia tốc kế của thiết bị di động của bạn nhiều lần mỗi giây. Hãy tắt chức năng này nếu ứng dụng của bạn không sử dụng nó, hoặc giảm tần suất sử dụng để cải thiện hiệu suất tổng thể.
Tìm hiểu thêm về gia tốc kế .

TẮT TẦN SỐ GIA TỐC KẾ NẾU BẠN KHÔNG SỬ DỤNG NÓ TRONG TRÒ CHƠI DI ĐỘNG CỦA MÌNH.
Tránh các cấu trúc phân cấp lớn.
Chia nhỏ các cấp bậc phân cấp của bạn. Nếu GameObjects của bạn không cần phải lồng nhau theo cấu trúc phân cấp, hãy đơn giản hóa việc thiết lập mối quan hệ cha con.
Các hệ thống phân cấp nhỏ hơn sẽ được hưởng lợi từ việc sử dụng đa luồng để làm mới các đối tượng Transform trong cảnh của bạn. Cấu trúc phân cấp phức tạp gây ra các phép tính Transform không cần thiết và tốn nhiều chi phí hơn cho việc thu gom rác.
Xem phần Tối ưu hóa hệ thống phân cấp và bài thuyết trình Unite này để biết các mẹo về Transforms.
Nén các kết cấu của bạn
Hãy xem xét hai ví dụ trên sử dụng cùng một mô hình và kết cấu. Các thiết lập bên trái tiêu tốn dung lượng bộ nhớ gần gấp 26 lần so với các thiết lập bên phải, mà chất lượng hình ảnh không được cải thiện nhiều.
Hãy sử dụng công nghệ nén kết cấu có thể mở rộng thích ứng (ATSC) cho thiết bị di động, XR và web. Đa số các trò chơi đang được phát triển thường nhắm đến các thiết bị có cấu hình tối thiểu hỗ trợ nén ATSC.
Ngoại lệ duy nhất là:
- Các trò chơi iOS nhắm mục tiêu vào các thiết bị A7 trở xuống (ví dụ: iPhone 5, 5S, v.v.) – sử dụng PVRTC
- Trò chơi Android nhắm mục tiêu vào các thiết bị trước năm 2016 – sử dụngETC2(Nén kết cấu Ericsson)
Nếu các định dạng nén như PVRTC và ETC không đủ chất lượng cao, và nếu ASTC không được hỗ trợ đầy đủ trên nền tảng mục tiêu của bạn, hãy thử sử dụng kết cấu 16 bit thay vì kết cấu 32 bit.
Xem hướng dẫn sử dụng để biết thêm thông tin về định dạng nén kết cấu được khuyến nghị theo từng nền tảng .

CÁC TEXTURE KHÔNG NÉN CẦN NHIỀU BỘ NHỚ HƠN SO VỚI CÁC TEXTURE ĐÃ NÉN.
Tận dụng cài đặt nhập kết cấu
Các họa tiết có thể tiêu tốn nhiều tài nguyên, vì vậy việc tối ưu hóa Cài đặt Nhập khẩu là rất quan trọng. Nhìn chung, hãy cố gắng tuân theo những hướng dẫn sau:
- Giảm kích thước tối đa :Hãy sử dụng các thiết lập tối thiểu để có được kết quả hiển thị chấp nhận được. Phương pháp này không gây hư hại và có thể nhanh chóng làm giảm khả năng ghi nhớ kết cấu của bạn.
- Sử dụng lũy thừa của hai (POT) :Unity yêu cầu kích thước texture POT cho các định dạng nén texture.
- Tắt tùy chọn Cho phép đọc/ghi :Khi được kích hoạt, tùy chọn này sẽ tạo một bản sao trong cả bộ nhớ có thể truy cập của CPU và GPU, làm tăng gấp đôi dung lượng bộ nhớ mà texture chiếm dụng. Hãy tắt chức năng này trong hầu hết các trường hợp, và chỉ bật nó lên nếu bạn tạo ra một texture trong quá trình chạy mà bạn cần ghi đè lên. Bạn cũng có thể áp dụng tùy chọn này thông qua Texture2D.Apply , truyền vào tham số makeNoLongerReadable được đặt thành True .
- Tắt các Mip Maps không cần thiết :Mip Maps không cần thiết cho các họa tiết có kích thước cố định trên màn hình, chẳng hạn như các hình ảnh 2D và đồ họa giao diện người dùng . Tuy nhiên, hãy để Mip Maps được bật đối với các mô hình 3D có khoảng cách khác nhau so với Camera.
Tìm hiểu thêm về Cài đặt Nhập kết cấu .
Atlas của bạn, các họa tiết
Atlasing là quá trình nhóm nhiều họa tiết nhỏ lại với nhau thành một họa tiết lớn duy nhất. Texture Atlas giúp giảm mức sử dụng bộ nhớ và yêu cầu ít lệnh vẽ hơn, do đó giảm bớt gánh nặng cho GPU.
- Đối với các dự án 2D : Hãy sử dụng Sprite Atlas ( Asset > Create > 2D > Sprite Atlas ) thay vì render từng sprite hoặc texture riêng lẻ.
- Dành cho các dự án 3D : Bạn có thể sử dụng gói Tạo Nội dung Số (DCC) mà bạn lựa chọn. Một số công cụ của bên thứ ba như MA_TextureAtlasser hoặc TexturePacker cũng có thể được sử dụng để tạo Texture Atlas.
Kết hợp các họa tiết và ánh xạ lại UV cho bất kỳ hình học 3D nào không yêu cầu bản đồ độ phân giải cao. Trình chỉnh sửa trực quan cho phép bạn thiết lập và ưu tiên kích thước và vị trí trong Texture Atlas hoặc Sprite Sheet .
Công cụ Texture Packer hợp nhất các bản đồ riêng lẻ thành một kết cấu lớn duy nhất. Sau đó, Unity có thể thực hiện một lệnh vẽ duy nhất để truy cập các texture đã được đóng gói với mức tiêu hao hiệu năng thấp hơn.
Tìm hiểu thêm về Sprite Atlases tại đây .

SỬ DỤNG TEXTURE ATLASES ĐỂ GIẢM SỐ LƯỢNG LỆNH VẼ.
Kiểm tra số lượng đa giác của bạn
Các mô hình có độ phân giải cao hơn đồng nghĩa với việc sử dụng nhiều bộ nhớ hơn và có thể dẫn đến thời gian xử lý đồ họa (GPU) lâu hơn. Liệu hình học nền của bạn cần đến nửa triệu đa giác? Hãy cân nhắc việc giảm bớt số lượng mô hình trong gói DCC mà bạn lựa chọn. Xóa các đa giác không nhìn thấy được từ góc nhìn của camera, và sử dụng kết cấu và bản đồ pháp tuyến để tạo chi tiết tinh tế thay vì lưới có mật độ cao.

LOẠI BỎ BẤT KỲ KHUÔN MẶT NÀO KHÔNG NHÌN THẤY ĐỂ TỐI ƯU HÓA MÔ HÌNH CỦA BẠN.
Quản lý cài đặt nhập lưới
Giống như các họa tiết, mô hình 3D cũng có thể tiêu tốn lượng bộ nhớ đáng kể, vì vậy hãy chọn cài đặt nhập tối ưu cho chúng. Giảm thiểu dung lượng bộ nhớ mà các mô hình lưới sử dụng bằng các phương pháp sau:
- Nén lưới: Nén mạnh có thể giảm dung lượng ổ đĩa (tuy nhiên, bộ nhớ trong quá trình thực thi không bị ảnh hưởng). Lưu ý rằng việc lượng tử hóa lưới có thể dẫn đến sai sót, vì vậy hãy thử nghiệm với các mức độ nén khác nhau để xem mức nào phù hợp với mô hình của bạn.
- Vô hiệu hóa chức năng đọc/ghi: Việc bật tùy chọn này sẽ sao chép lưới trong bộ nhớ, giữ một bản sao lưới trong bộ nhớ hệ thống và một bản sao khác trong bộ nhớ GPU. Trong hầu hết các trường hợp, bạn nên tắt tùy chọn này (trong Unity 2019.2 trở xuống, tùy chọn này được chọn mặc định).
- Vô hiệu hóa các bộ khung và hình dạng pha trộn: Nếu mô hình của bạn không cần hoạt ảnh xương hoặc hoạt ảnh biến đổi hình dạng, hãy tắt các tùy chọn này bất cứ khi nào có thể.
Vô hiệu hóa pháp tuyến và tiếp tuyến: Nếu bạn hoàn toàn chắc chắn rằng vật liệu lưới không cần pháp tuyến hoặc tiếp tuyến, hãy bỏ chọn các tùy chọn này để tiết kiệm thêm chi phí.

KIỂM TRA CÀI ĐẶT NHẬP LƯỚI CỦA BẠN
Xem thêm các tối ưu hóa lưới
Các tùy chọn tối ưu hóa lưới bổ sung có sẵn trong Cài đặt người chơi:
- Vertex Compression thiết lập mức độ nén đỉnh cho từng kênh. Ví dụ, bạn có thể bật tính năng nén cho mọi thứ ngoại trừ vị trí và tọa độ UV của bản đồ ánh sáng. Điều này có thể giảm mức sử dụng bộ nhớ khi chạy của các mô hình 3D.
- Ghi chú : Thiết lập Nén lưới trong Cài đặt Nhập của mỗi lưới sẽ ghi đè lên thiết lập Nén đỉnh. Trong trường hợp đó, bản sao lưới trong quá trình chạy sẽ không được nén và có thể sử dụng nhiều bộ nhớ hơn.
- Chức năng Tối ưu hóa dữ liệu lưới (Optimize Mesh Data) loại bỏ mọi dữ liệu khỏi lưới mà vật liệu áp dụng không yêu cầu (chẳng hạn như tiếp tuyến, pháp tuyến, màu sắc và tọa độ UV).
Kiểm toán tài sản của bạn
Bằng cách tự động hóa quy trình kiểm toán, bạn có thể tránh việc vô tình thay đổi cài đặt tài nguyên . AssetPostProcessor có thể giúp bạn chuẩn hóa cài đặt nhập khẩu hoặc phân tích các tài sản hiện có. Nó cho phép bạn chạy các tập lệnh khi nhập tài sản và về cơ bản, nhắc bạn tùy chỉnh cài đặt trước và/hoặc sau khi nhập mô hình, kết cấu, âm thanh, v.v.
Tìm hiểu thêm về kiểm toán tài sản trong hướng dẫn "Hiểu về tối ưu hóa" .
Điều chỉnh bộ đệm kết cấu không đồng bộ
Unity sử dụng bộ đệm vòng để đẩy các họa tiết lên GPU. Bạn có thể điều chỉnh thủ công bộ đệm kết cấu không đồng bộ này thông qua QualitySettings.asyncUploadBufferSize .
Nếu tốc độ tải lên quá chậm hoặc luồng chính bị kẹt khi tải nhiều kết cấu cùng lúc, hãy điều chỉnh các bộ đệm kết cấu này . Thông thường, bạn có thể đặt giá trị (tính bằng MB) bằng kích thước của kết cấu lớn nhất mà bạn cần tải trong cảnh.
Hãy nhớ rằng việc thay đổi các giá trị mặc định có thể dẫn đến tình trạng quá tải bộ nhớ. Ngoài ra, bạn không thể trả lại bộ nhớ đệm vòng cho hệ thống sau khi Unity đã cấp phát nó. Nếu bộ nhớ GPU bị quá tải, GPU sẽ giải phóng kết cấu được sử dụng gần đây nhất và ít nhất, đồng thời buộc CPU phải tải lại kết cấu đó vào lần tiếp theo khi nó vào vùng nhìn của Camera.
Hãy tìm hiểu tất cả các hạn chế về bộ nhớ đối với bộ đệm kết cấu trong hướng dẫn Quản lý bộ nhớ và tham khảo phần Tối ưu hóa hiệu suất tải để xem cách bạn có thể cải thiện thời gian tải.
Phát trực tuyến Mip Maps và kết cấu
Hệ thống Mip Map Streaming cho phép bạn kiểm soát các cấp độ Mip Map nào sẽ được tải vào bộ nhớ. Kích hoạt tính năng này bằng cách vào cài đặt Chất lượng của Unity ( Chỉnh sửa > Cài đặt Dự án > Chất lượng ) và chọn tùy chọn Truyền tải kết cấu (Texture Streaming ). Bạn có thể bật Streaming Mip Maps trong phần Cài đặt Nhập kết cấu ở mục Nâng cao .
Hệ thống này giảm tổng lượng bộ nhớ cần thiết cho các họa tiết vì nó chỉ tải các Mip Map cần thiết để hiển thị vị trí Camera hiện tại. Ngược lại, Unity sẽ tải tất cả các texture theo mặc định.
Công nghệ Texture Streaming đánh đổi một lượng nhỏ tài nguyên CPU để tiết kiệm một lượng lớn bộ nhớ GPU. Nó cũng tự động giảm mức độ Mip Map để nằm trong giới hạn bộ nhớ do người dùng thiết lập.
Bạn có thể sử dụng API Mip Map Streaming để điều khiển thêm.

CÀI ĐẶT TRUYỀN PHÁT KẾT CẤU
Sử dụng Addressables
Hệ thống quản lý tài sản có thể định địa chỉ cung cấp một cách đơn giản để quản lý nội dung của bạn. Hệ thống thống nhất này tải AssetBundles theo "địa chỉ" hoặc bí danh, bất đồng bộ từ đường dẫn cục bộ hoặc mạng phân phối nội dung (CDN) từ xa.
Nếu bạn tách các tài sản không phải mã lập trình (mô hình, kết cấu, Prefab, âm thanh, và thậm chí cả toàn bộ cảnh) thành một AssetBundle , bạn có thể tách chúng ra thành nội dung có thể tải xuống (DLC).
Tiếp theo, hãy sử dụng Addressables để tạo một bản dựng ban đầu nhỏ hơn cho ứng dụng di động của bạn. Cloud Content Delivery cho phép bạn lưu trữ và cung cấp nội dung trò chơi cho người chơi khi họ tiến bộ trong trò chơi.
Hãy xem hướng dẫn Bắt đầu với Addressables trên Unity Learn để có cái nhìn tổng quan nhanh chóng về cách Hệ thống Tài sản Addressable có thể hoạt động trong dự án của bạn.
Và hãy nhấp vào đây để xem Hệ thống Quản lý Tài sản Có thể Định địa chỉ (Addressable Asset System) có thể giúp bạn đơn giản hóa việc quản lý tài nguyên như thế nào.

TẢI TÀI SẢN THEO "ĐỊA CHỈ" SỬ DỤNG HỆ THỐNG TÀI SẢN CÓ THỂ ĐỊA CHỈ
Thêm mẹo dành cho Unity 6
Tìm hiểu thêm các mẹo và kinh nghiệm thực tiễn tốt nhất dành cho các nhà phát triển và người sáng tạo Unity chuyên nghiệp tại trung tâm kinh nghiệm thực tiễn tốt nhất Unity . Hãy lựa chọn từ hơn 30 hướng dẫn được tạo ra bởi các chuyên gia trong ngành, các kỹ sư và nghệ sĩ kỹ thuật Unity , giúp bạn phát triển hiệu quả với bộ công cụ và hệ thống của Unity.
