12/08/2018, 13:38

AssetBundle trong Unity (phần 2)

Ở bài viết lần trước, chúng ta đã biết về assetbundle và vai trò của nó trong Unity. Hôm nay chúng ta sẽ đi sâu vào cách làm việc với assetbundle và assetbundle manager. Giới thiệu Một trong những lĩnh vực quan trọng khi làm việc hiệu quả với AssetBundles là xây dựng và thử nghiệm các ...

Ở bài viết lần trước, chúng ta đã biết về assetbundle và vai trò của nó trong Unity. Hôm nay chúng ta sẽ đi sâu vào cách làm việc với assetbundle và assetbundle manager.

  1. Giới thiệu

    Một trong những lĩnh vực quan trọng khi làm việc hiệu quả với AssetBundles là xây dựng và thử nghiệm các bundle. Thông thường, trong quá trình phát triển, bản thân các asset sẽ thay đổi thường xuyên. Thông thường điều này sẽ đòi hỏi phải thường xuyên xây dựng AssetBundles, đưa chúng lên một máy chủ và thử nghiệm các host AssetBundles từ xa thông qua một kết nối mạng với các dự án làm việc. Các AssetBundle Manager cung cấp một API cấp cao cho một công việc ồ ạt và nó cải thiện hơn so với thao tác Asset Bundle trực tiếp với các API nền tảng từ mức thấp.

  2. Làm việc với Assetbundle

    Các bước làm việc với AssetBundles trong trình soạn thảo khái xếp thành các bước sau:

    • Tổ chức & cài đặt AssetBundles trong trình soạn thảo.
    • AssetBundles Building.
    • Tải lên AssetBundles để lưu trữ bên ngoài.
    • Load AssetBundles tại thời gian chạy.
    • Đăng tải các đối tượng từ AssetBundles.

    Điều đáng chú ý là một số AssetBundles có thể được lưu trữ cục bộ để tải ngay lập tức như một thiết lập mặc định. Điều này rất hữu ích để chống lại một cài đặt mà ứng dụng không thể đạt được lưu trữ bên ngoài từ xa để tải AssetBundles mong muốn. Ví dụ, ứng dụng sẽ tải ngôn ngữ mặc định và dữ liệu nội địa hóa từ một AssetBundle địa phương khi ứng dụng không có quyền truy cập vào nội dung tải về.

    Đáng chú ý là một AssetBundle chứa tài sản nền tảng. Nội dung của một AssetBundle đã được biên soạn và tối ưu hóa cho nền tảng mục tiêu hiện hành theo Cài đặt báo trước và các Target Platform trong Build Setting. Bởi vì điều này, AssetBundles nên được xây dựng cho mỗi nền tảng mục tiêu.

    Trong cảnh đơn giản sau đây, một cách hợp pháp của tổ chức scene vào AssetBundles cho tính linh hoạt lớn nhất để có một scene cơ bản, trong đó sẽ bao gồm ground, các đụn cát, cột đá, cây và cây xương rồng. Scene này có thể được phép bao gồm các Material phụ thuộc, vì nó khá đơn giản và sẽ không có khả năng cần phải thay đổi tùy thuộc vào độ phân giải hoặc thiết bị. Mô hình xe tăng sẽ là một trong AssetBundle của riêng nó, mà sẽ cho phép thay đổi hoặc cập nhật các Asset của người chơi. Hai AssetBundles bổ sung sẽ được sử dụng để hoàn thành GameObject. Đây sẽ là các asset phụ thuộc trong một object, và các kết cấu phụ thuộc ở object khác. Điều này sẽ cho phép thay đổi và cập nhật các kết cấu và vật liệu khi cần thiết với chi phí ít nhất của sự cố. Tổ chức đặc biệt này cũng sẽ cho phép các phiên bản thay thế, hoặc các biến thể, các asset phải được nạp từ một sự lựa chọn của AssetBundle biến thể theo nhu cầu, chẳng hạn như là nền tảng, vị trí hay độ phân giải của thiết bị mục tiêu.

    image1.png

                                      Một ví dụ của Scene đơn giản
    

    Để tổ chức và thiết lập AssetBundles trong trình soạn thảo, bản thân các asset cần phải được giao cho một AssetBundle. Khi xem một Asset, tên AssetBundle và AssetBundle Variant có thể được tìm thấy ở dưới cùng của cửa sổ preview trong thanh tra. Cửa sổ preview phải được mở để nhìn thấy chúng.

    image2.png

                 Một Asset không được Assign cho AssetBundle
    

    Để assign một asset cho một AssetBundle, sử dụng drop down menu của AssetBundle Name. Ở đây, bạn cần tạo một tên AssetBundle mới hoặc chọn một trong các tên có sẵn.

    image3.png

                 Assign một asset cho một AssetBundle
    

    Để tạo một AssetBundle mới, chọn New và một text field sẽ trở thành tên của một AssetBundle mới. Để xóa một tài sản từ một AssetBundle, chọn None và các asset. Để xóa một danh AssetBundle từ danh sách, tất cả asset assign cho AssetBundle Name phải được loại bỏ từ AssetBundle Name đó, và sau đó "Remove Unused Names" có thể được lựa chọn. Điều này sẽ loại bỏ tất cả các AssetBundle Name không sử dụng.

    image4.png

                 Tạo mới một AssetBundle Name
    

    Tài sản sẽ được giao cho các AssetBundle chọn trong menu AssetBundle Name. Nếu một ký tự hoa được sử dụng, như trong ví dụ trên, Unity sẽ thay thế các chữ hoa với một chữ thường.

  3. Sử dụng AssetBundle Variant

    Có thể tải asset theo yêu cầu từ AssetBundles cho phép đối với nhiều giải pháp sáng tạo cho các vấn đề khó khăn liên quan đến loading, lưu trữ và cập nhật Asset. Một trường hợp cụ thể mà có thể giúp AssetBundles là sự cần thiết để tải một tập khác nhau của asset vào một dự án phụ thuộc vào thiết bị, địa điểm hoặc người sử dụng ưu đãi. Điều này được thực hiện bằng cách sử dụng AssetBundle Variant.

    AssetBundle Variant cung cấp các phiên bản khác nhau của các asset tương tự được gán cho một đối tượng trong scene. AssetBundle Variant hoàn toàn remap các asset khác nhau cho cùng một đối tượng. Chỉ có một biến thể của một AssetBundle là không bao giờ tải tại bất kỳ thời điểm nào. Asset Variant có thể được tạo ra cho nhiều tình huống khác nhau. Asset Variantể có thể có độ phân giải khác nhau của các tài sản như nhau: đồ họa nét chuẩn vs đồ họa độ nét cao hoặc các mô hình với polycounts khác nhau. Asset Variant có thể được tạo ra với nội dung khác nhau cho một đối tượng: văn bản, hình ảnh, họa tiết và kiểu chữ có thể khác nhau cho mỗi ngôn ngữ, khu vực hoặc chủ đề hỗ trợ. Những tài sản được lưu trong một loạt các cấu trúc AssetBundles và xác định bởi Tên biến thể của nó.

    Để làm việc này, tất cả các AssetBundle Variant phù hợp phải được xây dựng và đặt tên giống nhau. Sự khác biệt duy nhất giữa AssetBundle Variant là asset cá nhân chứa trong AssetBundle và AssetBundle Variant Name đó được nối thêm vào danh AssetBundle để xác định nó. Để trở thành một AssetBundle Variant tương thích, cấu trúc và nội dung của AssetBundle phải phù hợp với thư mục. Tất cả các tài sản cần phải có mặt trong mỗi AssetBundle, và phải có cùng tên và thứ tự cùng cấp bậc.

    Ví dụ sau đây có thể được tìm thấy trong các mẫu AssetBundle.

    image5.png

                 Ví dụ của AssetBundle Variant
    

    Trong ví dụ trên, cả hai thư mục - MyAssets-HD và MyAssets-SD - đã được giao cho AssetBundle Name "myassets". Sau đó đã được đưa ra một AssetBundle Variant Name để xác định nó, trong những trường hợp hd và sd tương ứng. Lưu ý làm thế nào hai bộ tài sản có cùng tên và chia sẻ cấu trúc cùng thứ bậc. Khi thư mục cha đã được giao cho một AssetBundle và không ai trong số các con đã được giao cho một AssetBundle, tất cả các con sẽ được thêm vào AssetBundle của cha mẹ khi nó được xây dựng.

  4. Sử dụng AssetBundle Manager

    Các AssetBundle Manager là một gói phần mềm tải về mà có thể được cài đặt trong bất kỳ dự án Unity hiện tại và sẽ cung cấp một API cấp cao và cải tiến quy trình làm việc để quản lý AssetBundles. Các AssetBundle Manager có thể được tải về tại https://www.assetstore.unity3d.com/en/#!/content/45836. Để sử dụng AssetBundle Manager trong một dự án, chỉ cần thêm thư mục AssetBundle Manager tại thư mục asset của dự án.

    Xây dựng và thử nghiệm AssetBundles có thể là một pain-point trong khi phát triển. Asset thường được thay đổi một cách thường xuyên. Với API AssetBundle cấp thấp, thử nghiệm sẽ đòi hỏi xây dựng thường xuyên và tải lên của AssetBundles đến một máy chủ từ xa và thử nghiệm các AssetBundles hosting từ xa thông qua một kết nối mạng với các dự án làm việc. Các AssetBundle Manager cho phép cho một công việc cải thiện ồ ạt so với thao tác AssetBundles trực tiếp với các API cấp thấp. Các AssetBundle Manager giúp quản lý các bước quan trọng trong việc xây dựng và thử nghiệm AssetBundles. Các tính năng chính được cung cấp bởi AssetBundle Manager là một chế độ mô phỏng, một AssetBundle máy chủ địa phương và một mục menu nhanh chóng để xây dựng AssetBundles để làm việc liên tục với máy chủ AssetBundle địa phương.

    Sử dụng quản lý AssetBundle cho một dự án sẽ tạo ra một mục mới trong menu asset được gọi là "AssetBundles".

    image6.png

    image7.png

    Chế độ mô phỏng, khi được kích hoạt, cho phép soạn thảo để mô phỏng AssetBundles mà không cần phải thực sự xây dựng chúng. Để kích hoạt tính năng chế độ mô phỏng, chọn mục trình đơn "Simulation Mode". Một checkmark sẽ xuất hiện chỉ ra rằng chế độ mô phỏng được kích hoạt. Để vô hiệu hóa Simulation Mode, chọn mục menu một lần nữa. Chế độ mô phỏng sẽ bị vô hiệu và việc kiểm tra, đánh dấu sẽ được gỡ bỏ.
    
    Với Simulation Mode được kích hoạt, các biên tập viên trông thấy mà tài sản được giao cho AssetBundles và sử dụng các tài sản trực tiếp từ hệ thống phân cấp của Dự án nếu họ ở trong một AssetBundle. Những AssetBundles, tuy nhiên, không cần phải được xây dựng. Từ thời điểm này, công việc trong các biên tập viên có thể tiếp tục như thể AssetBundles được xây dựng và lưu trữ từ xa.
    
    Các lợi thế rất lớn đến công việc khi chế độ mô phỏng được kích hoạt đó là asset có thể được thay đổi, chế tác, nhập khẩu, loại bỏ và miễn là họ được giao một cách chính xác để một AssetBundle, làm việc trên dự án không cần phải dừng lại để xây dựng và triển khai AssetBundles trước thử nghiệm. Thử nghiệm với chế độ mô phỏng kích hoạt là ngay lập tức.
    
    Điều đáng chú ý là AssetBundle Vảiant không làm việc theo Simulation Mode. Để kiểm tra AssetBundle Variant, các AssetBundles sẽ cần phải được xây dựng và triển khai. AssetBundle Variant làm việc với cấc assset máy chủ địa phương.
0