Hướng dẫn sửa lỗi lập trình unity không chạy được năm 2024

Làm thế nào để một game có thể chạy mượt mà trên nhiều điện thoại với cấu hình khác nhau là một vấn đề khó . Trong khi bạn khó có thể tối ưu hóa game ngay từ khi phát triển, bạn có thể sử dụng những thủ thuật sau để tối ưu hóa nó. Tối ưu hóa Game một nữa là kinh nghiệm một nửa là nghệ thuật .

0: Chọn thiết bị phát triển của bạn càng nhiều càng tốt (thiết bị test )

Những thiết bị có cấu hình thấp càng tốt. Tuy nhiên bạn cũng cần xác định giới hạn game có thể chạy ở cấu hình tối thiểu thế nào . Có trong tay những thiết bị cấu hình thấp bạn có thể bắt đầu tối ưu hóa game được ngay khi bắt tay phát triển.nhieu_thiet_bi

1 Tối ưu hóa kích thước file build

Đôi khi game có kích thước lớn mà không tìm ra nguyên nhân. Cố gắng giữ dung lượng file build ra ở mức thấp nhất rất quan trọng. Nó ảnh hưởng đến quyết định tải game về của người chơi. Và một phần không kém là khi quyết định gỡ game để lấy dung lượng bộ nhớ , người dùng sẽ gỡ những game có kích thước lớn trước.

1 Nén hình ảnh (textures) và âm thanh

Build game và kiểm tra Editor Log để tìm xem files nào chiếm nhiều nhiều dung lượng trong game. Hầu hết chúng là hình ảnh hoặc âm thanh. Hình ảnh nên để hình vuông và ở dạng POT (Power of Two – dài rộng chia hết cho 2) để có thể nén , kích thước trong khoảng 1024×1024. Cố gắng không lớn hơn 2048. Audio file nên để dạng nén trừ phi nó quá ngắn và việc nén xuống làm giảm chất lượng.

2: Gộp các sprites

Tất cả các sprites trong UI và game nên được gộp lại (đóng gói -pack) trong một file bất cứ khi nào có thể . Trong Unity 5 bạn có công cụ miễn phí Sprite Packer , nhưng bạn cũng có thể sử dụng công cụ khác như NGUI. Gộp các sprite là cách tốt để sử dụng các spites không phải dạng POT. Unity sẽ quản lý các sprite cho bạn và giảm được khá nhiều dung lượng bộ cài.

3: Bật loại bỏ dll không sử dụng (Stripping mscorlib level)

Nếu dự án hoặc Plugin của bạn có thể , nên bật stripping bỏ những dlls không dùng trong project. Thiết lập sẽ làm bạn bất ngờ về dung lượng giảm đi nếu bạn làm 2D game và không sử dụng nhiều tính năng của Unity.

4: Hãy chắc chắn loại bỏ các assets không cần thiết

Nếu bạn disabled gameObject trong scene, unity vẫn đưa mọi asset mà gameObject có liên quan vào file build thậm chí ngay cả khi bạn không bao giờ enable nó. Xóa toàn bộ gameObject không sử dụng trong hierarchy. Bất cứ file nào nằm trong thư mục “Resources” sẽ được đưa vào file build , hãy kiểm tra kỹ!

5 Tối ưu hóa sử dụng bộ nhớ

Khi hệ điều hành (Operational Systems ) cập nhật nó sẽ sử dụng nhiều bộ nhớ và game của bạn sẽ được cấp phát RAM ít đi. Cố gắng giảm thiểu số lượng asset tải vào bộ nhớ càng nhiều càng tốt. Thỉnh thoảng game bị văng ra thường là do thiếu bộ nhớ.

6: Gộp các Sprites … một cách thông minh

Khi lần đầu tiên Game khởi động các file sẽ được giải nén, vì vậy chúng sẽ chiếm nhiều dung lượng. Nhưng nếu bạn gộp (đóng gói -pack) các sprites một cách tiết kiệm , game sẽ dùng ít RAM. Kinh nghiệm cho thấy gộp những gì xuất hiện cùng nhau và cố gắng không để khoảng trống trong atlases. Ví dụ, bạn nên gộp toàn bộ UI trong một atlas riêng biệt. Trong trường hợp có những phần UI asset không thường xuất hiện, nên gộp nó trong một atlas khác. Sử dụng 9-sliced sprites và tránh sử dụng một ảnh lớn làm ảnh nền (background pictures ) ! (Nên tạo nó từ tiles sprites hoặc sprites đơn giản). Tắt MIP maps.

7: Giảm chất lượng ảnh hoặc âm thanh

Bạn có chắc là cần sử dụng nhân vật với độ rộng 1024 điểm ảnh (pixels)? Thường thì độ phân giải màn hình mobile là 1024×768 (trừ phi bạn cần sử dụng trên một màn hình lớn hơn nữa ), không cần sử dụng nhân vật với độ rộng 1204px. Nhạc nền lặp lại 3 phút ư? Có lẽ bạn chỉ cần làm 30 giây. Trên màn hình mobile hầu hết mọi người không nhận ra sự khác biệt giữa hình ảnh và âm thanh có chất lượng tốt và trung bình.

8: Cận thận với những liên kết trong scene

Khi tôi làm việc với một game có nhiều ảnh. Tùy thuộc vào người chơi lựa chọn , tôi sẽ khởi tạo (Instantiat) một Prefab từ một danh sách nhiều Prefab. Thật ngạc nhiên, danh sách này là nguyên nhân toàn bộ prefabs tải vào bộ nhớ và theo đó là toàn bộ hình ảnh. Hãy sử dụng công cụ Profile. Profiling không nói dối.

9: Sử dụng thư mục Resources khi cần thiết

Giải pháp trong nhiều trường hợp là đặt toàn bộ prefabs/assets vào trong thư mục Resources folder và tải lên ( load dynamically ) khi bạn cần. Nó không phải là ý hay vì bạn phải cung cấp đường dẫn (path ) tới asset và khi di chuyển nó sang thư mục khác sẽ gây ra lỗi.

10 Tối ưu hóa sử dụng CPU

Một game chậm là một game tệ hại . Người chơi có thể chấp nhận những khía cạnh của một game như : giao diện không đẹp, cốt truyện tệ, hình ảnh không trau chuốt… nhưng một trải nghiệm về hiệu năng tồi là điều không thể chấp nhận . Bạn cần biết giới hạn trong trường hợp nào cần quyết định giảm chất lượng mọi thứ để tăng FPS ( Frames Per Second)

11: Tối ưu mã nguồn cẩn thận Vd: vòng lặp foreach.

Đây là thủ thuật tối ưu hóa CPU của Unity. Vì phiên bản cũn .NET framework mà Unity sử dụng nhiều thứ không hiệu quả như mong đợi. Vì khả năng thay đổi sẽ không nhanh bạn nên thay thế vòng lặp “foreach” bằng “for” và “lists” bằng “arrays”. Về tối ưu mã nguồn có thể xem thêm here.

12: Loại bỏ Debug trong phiên bản Release

Unity làm việc với chuỗi strings rất chậm bạn nên giảm thiếu các thao tác trên chuỗi. Đó là lý do loại bỏ hàm “Debug.Log” khi build release. Thử và bạn sẽ thấy ngạc nhiên vì nó tạo ra sự thay đổi lớn đấy.

13: Tối ưu từ dưới lên trên .

Khi tối ưu hóa game bạn nên sử dụng công cụ Profiler và những classes làm chậm game sẽ dễ được phát hiện. Tối ưu hóa lớp này sẽ tăng hiệu năng đáng kế cho cả các lớp khác sử dụng chúng .

14: Loại bỏ những nút cổ chai (bottlenecks) như các vòng lặp lồng nhau quá nhiều hoặc khởi tạo nhiều lần một đối tượng.

Giả sử bạn có một script “PlayerController” và một script “EnemyController”. Nếu bạn có 100 Enemy trong Screen tại một thời điểm .”PlayerController” sẽ phải chậm hơn 100 lần để tạo nên sự khác biệt trong game. Vì thế tối ưu hóa script “EnemyController”. Loại bỏ những hàm chậm như “FindObjectOfType”, hàm này không nên gọi trong “Update”. Cache các biến thậm chỉ cả lớp Singleton có thể tăng đáng kế hiệu năng.