2013-07-02 41 views
6

Vì vậy, tôi đã thực hiện một chút đọc xung quanh diễn đàn về AssetBundles và thư mục Tài nguyên trong Unity 3D và tôi không thể tìm ra giải pháp tối ưu cho vấn đề tôi đang gặp phải. Đây là vấn đề:Unity 3D: Gói nội dung so với Thư mục tài nguyên vs www.Texture

Tôi có một chương trình được thiết kế độc lập, tải "sách" đầy đủ các hình ảnh .png và .jpg. Các trang, tại thời điểm này, giống nhau mỗi khi chương trình bắt đầu. Khi bắt đầu cảnh cho bất kỳ "cuốn sách", nó tải tất cả những hình ảnh đó cùng một lúc bằng cách sử dụng www.texture và một đường dẫn. Tuy nhiên, tôi nhận ra rằng đây có thể là một phương pháp không thực hiện để truy cập mọi thứ trong thời gian chạy - nó chậm! Điều đó có nghĩa là người dùng không thể làm bất cứ điều gì trong 5-20 giây trong khi cảnh bắt đầu và hình ảnh trang của cuốn sách tải lên (trên máy tính không phải là huyền thoại). SO, tôi không thể biết được ba điều nào là nhanh nhất:

1) Tải một gói nội dung trên mỗi cuốn sách (nói 20 họa tiết @ 1 mb mỗi cuốn sách).

2) Tải một gói nội dung trên mỗi trang (1 mb mỗi trang).

3) Một trong hai tùy chọn đầu tiên, nhưng được tải từ thư mục tài nguyên.

Điều nào sẽ nhanh hơn và tại sao? Tôi hiểu rằng các gói nội dung được đóng gói bởi sự thống nhất, nhưng điều này có nghĩa là các kết cấu bên trong sẽ được nén trước và dễ dàng hơn vào bộ nhớ khi tải? Thư mục tài nguyên có gây ra thời gian tải ít hơn không? Đưa cái gì? Như tôi đã hiểu, thư mục tài nguyên sẽ tải vào bộ nhớ cache - nhưng đó có phải là cùng một bộ nhớ cache mà trình phát độc lập sử dụng bình thường không? Hoặc là không gian này, không sử dụng? Tôi đoán một vấn đề khác là tôi không chắc chắn sự khác biệt giữa việc tải những thứ từ bộ nhớ và lưu trữ chúng trong bộ nhớ cache là gì.

Chúc mừng, mọi người ...

Trả lời

8

Thư mục tài nguyên được nhóm nội dung được quản lý. Điều đó có nghĩa là chúng sẽ được Unity nén lại, theo các thiết lập mà bạn áp dụng trong IDE. Do đó, chúng có hiệu quả để tải khi chạy. Bạn có thể điều chỉnh nén cho mỗi nền tảng, điều này sẽ tối ưu hóa hiệu suất hơn nữa.

Chúng tôi sử dụng tài nguyên đắt tiền.Load() để kéo nội dung và hoạt động tốt trên cả máy tính để bàn và thiết bị di động.

Ngoài ra còn có một thư mục đặc biệt, được gọi là StreamingAssets, mà bạn có thể sử dụng để đưa các tài sản không được quản lý đi kèm. Đây là nơi chúng tôi đặt các video chúng tôi muốn phát trong thời gian chạy, nhưng không muốn Unity chuyển đổi chúng thành codec ogg mặc định. Trên thiết bị di động, trình phát này trong trình phát video gốc. Bạn cũng có thể đặt hình ảnh trong đó và tải chúng giống như sử dụng lớp WWW. Chậm vì Unity cần vệ sinh và nén hình ảnh vào thời gian tải.

Tải WWW chậm hơn do chi phí của tài sản xử lý như đã đề cập ở trên. Nhưng bạn có thể lấy dữ liệu từ máy chủ hoặc từ bên ngoài ứng dụng "sandbox".

  • Chỉ tải những gì bạn cần để hiển thị và triển khai quy trình nền để tìm nạp nội dung bổ sung khi người dùng bận đi qua các trang đầu tiên của mỗi cuốn sách. Điều này sẽ tránh chặn giao diện người dùng quá lâu.
  • Tối ưu hóa hình ảnh để giảm kích thước tệp. Sử dụng tinypng, nếu bạn cần hình ảnh trong suốt hoặc dính vào JPG đã nén
  • Thử sử dụng Power of 2 images nếu có thể. Điều này sẽ tăng tốc độ xử lý thời gian chạy một chút.

ath.

+0

Đây là một câu trả lời tuyệt vời về thư mục tài nguyên, mặc dù tôi vẫn còn hơi bối rối về cách tôi có thể sử dụng AssetBundles. Tôi sẽ thử tải mọi thứ từ thư mục nội dung và xem cách thực hiện. – Catlard

+2

AssetBundles giống như thư mục Tài nguyên mà bạn tải khi chạy từ bên ngoài. Bạn có thể tải một gói từ một nguồn cục bộ hoặc một máy chủ. Một khi nó được tải, bạn có thể truy cập vào các tài sản của nó giống như các tài sản được đóng gói tại thời gian biên dịch bên trong các thư mục Tài nguyên. AssetsBundles là tuyệt vời để giảm kích thước ứng dụng đã biên dịch và tải nội dung động (rất có thể từ máy chủ) vào thời gian chạy để đảm bảo rằng người dùng có các tài sản mới nhất. –

4

Câu trả lời hay từ Jerome về Tài nguyên. Để thêm một số thông tin bổ sung cho các tìm kiếm trong tương lai liên quan đến AssetBundles, đây là hai kịch bản:

Trò chơi của bạn là quá lớn

Bạn có một tấn kết cấu, nói, và trò chơi iOS của bạn là trên 100 mb - nghĩa là Apple sẽ hiển thị cảnh báo cho người dùng và ngăn họ tải xuống qua di động. Tài nguyên sẽ không hữu ích bởi vì mọi thứ trong thư mục đó đều đi kèm với ứng dụng.

Giải pháp: Di chuyển tác phẩm nghệ thuật bạn không hoàn toàn cần vào lần chạy đầu tiên thành các gói nội dung. Xây dựng các gói, tải chúng lên máy chủ ở đâu đó, sau đó tải chúng xuống khi cần thiết. Bây giờ trò chơi của bạn nhỏ hơn nhiều và sẽ không có bất kỳ cảnh báo đáng sợ nào.

Bạn cần phiên bản khác nhau của tác phẩm nghệ thuật cho các nền tảng khác nhau

Phương án phụ: bạn đang phát triển cho iPhone và iPad. Đối với những lý do tương tự như trên, bạn thu nhỏ tác phẩm nghệ thuật của bạn càng nhiều càng tốt để đạt giới hạn 100 mb cho iPhone. Nhưng bây giờ trò chơi trông khủng khiếp trên iPad. Làm gì?

Giải pháp: Bạn tạo một gói nội dung có hai biến thể. Một cho điện thoại có tác phẩm nghệ thuật có độ phân giải thấp và một cho máy tính bảng có tác phẩm nghệ thuật có độ phân giải cao. Trong trường hợp này, các gói nội dung có thể được gửi cùng với trò chơi hoặc được gửi đến máy chủ. Vào thời gian chạy, bạn chọn đúng biến thể và tải từ gói nội dung, nhận tác phẩm nghệ thuật phù hợp mà không cần phải nếu/ở bất kỳ đâu.

Với tất cả những gì được nói, gói nội dung phức tạp hơn để sử dụng, tài liệu kém và các bản trình diễn của Unity không hoạt động bình thường ở lần. Vì vậy, đánh giá nghiêm túc cho dù bạn cần chúng.