Asset Bundle ใน Unity 5 by

31
Jul
0

จากบทความที่แล้ว  เป็น Asset Bundle ใน Unity 4 มาวันนี้ Asset Bundle ได้ปรับรูปแบบวิธีการใช้งานแล้ว ผมจึงมา update วิธีใช้งานกันสักหน่อย

จากเดิมเราต้องเขียน Code ขึ้นมาใช้งานวนลูปหา file ที่ต้องการ ค่อนข้างยุ่งยาก และจะมีปัญหากรณีมี Bundle ตัวหนึ่งที่มี dependency เป็น asset ตัวเดียวกันก็อาจทำให้ต้องโหลด asset ตัวนั้นมาซ้ำกันได้ เช่น Bundle A มีรูปตัวละคร A ที่ต้องใช้ Background รูปหนึ่ง และ Bundle B มีรูปตัวละคร B ที่ต้องใช้ Background ตัวเดียวกัน แต่เดิมเพื่อตัดปัญหาความยุ่งยากเราอาจต้องใส่ Background ตัวนี้เข้าไปทั้งสอง Bundle แต่ถ้าเป็น Unity 5 จะไม่เป็นอย่างนั้นแล้วโดยเราสามารถระบุว่าอยากให้ไฟล์ไหนอยู่ใน Bundle อะไรแยกหมวดหมู่ได้ตั้งแต่อยู่ใน Editor ยังไม่ต้องเขียน Code เลย และในเคสนี้เราสามารถแบ่งเป็นสาม bundle คือ Bundle A, Bundle B, Bundle Background ได้อย่างสะดวก โดย Unity จะพิจารณาเอาเองว่าถ้าหนึ่งใน Bundle ที่เราสร้างมี dependency กับ Bundle อื่นๆ มันจะใส่ Bundle นั้นๆ เข้าไปซ้ำกันภายใน Bundle อื่นๆ อีกรอบ ส่งผลให้เราจัดการ dependency ได้ง่ายกว่าเดิมมาก เรามาดูขั้นตอนการสร้าง Bundle กันดีกว่า

1

  1. คลิกเลือก Resource ที่เราต้องการจะสร้าง Bundle สามารถ Multi Select ได้ตามรูป
  2. คลิกที่ช่อง None ใน Inspector ทางข้างล่าง ช่อง preview ตามรูป
    2 3
    4 5
  3. กด New และตั้งชื่อตามต้องการ โดยสามารถตั้งให้อยู่ใน directory ก็ได้เช่น crystal/form5 หรือ win เฉยๆ ก็จะไม่อยู่ภายใต้ folder ใดๆ
  4. สร้าง Folder Editor ขึ้นมา และสร้างไฟล์ C# เป็น Assets/Editor/AssetBundle.cs
  5. ระบุเนื้อหาภายใน Code เป็นดังนี้

    using UnityEngine;
    using UnityEditor;
    public class AssetBundle {
    [MenuItem("Assets/Build AssetBundle")]
    static void ExportResource () {
    BuildPipeline.BuildAssetBundles("bundle", BuildAssetBundleOptions.None, BuildTarget.Android); // เปลี่ยน Android เป็น Platform อื่นได้ตามใจชอบครับ
    }
    }
  6. สร้าง Folder ชื่อว่า “bundle” โดยอยู่ที่ folder project เลย (นอก Assets) เอาไว้เป็นที่เก็บไฟล์ bundle ที่สร้างจากข้อ 5 (parameter ตัวแรกนั่นแหละ สามารถตั้งเป็นชื่ออื่นแทนได้)
  7. จะมีเมนู “Build AssetBundle” ปรากฎภายใต้เมนู Assets ก็กดสร้างซะเลย
    6
  8. จะได้ผลลัพธ์ดังรูป
    7
  9. สำหรับ .manifest ลองเปิดไฟล์ win.manifest ด้วย Text Editor ใดๆ ก็จะพบดังนี้

    ManifestFileVersion: 0
    CRC: 2678385196
    Hashes:
    AssetFileHash:
    serializedVersion: 2
    Hash: 199d6df2d4882a014033858fb5748467
    TypeTreeHash:
    serializedVersion: 2
    Hash: 75957c18d05791510cbdd301a328d69f
    HashAppended: 0
    ClassTypes:
    - Class: 28
    Script: {instanceID: 0}
    - Class: 213
    Script: {instanceID: 0}
    Assets:
    - Assets/crystal_5_water/win_1.png
    Dependencies: []
  10. ตรงนี้อธิบายได้ดังนี้
    • ManifestFileVersion – เป็นเลขเวอร์ชั่น จะค่อยๆ ปรับขึ้นตามจำนวนการแก้ไขของเรา ตรงนี้ดีกว่า Unity4 มากๆ เพราะไฟล์ที่ไม่มีการเปลี่ยนแปลง Unity จะรู้โดยอัตโนมัติและไม่สร้างไฟล์ซ้ำ ทำให้ประหยัดเวลาสร้างขึ้นเยอะ
    • CRC – ใช้อ้างอิงเวลา load bundle หากมีการแก้ไขเลขนี้ ตัว unity จะสั่งโหลดใหม่จาก server ให้เอง หากไม่แก้ไขก็จะ load จาก cache ในเครื่อง
    • Hash (ดูที่ AssetFileHash ตัวเดียวพอ) – เลข Hash คล้ายๆ CRC ที่ใช้ตอน load bundle เพื่อว่ามี update ไหม แต่ต่างตรงที่สามารถกำหนดให้ไฟล์เวอร์ชั่น SD และ HD มี Hash เดียวกันได้เพื่อความสะดวกด้วยการกำหนดชื่อไฟล์ SD และ HD ให้เป็นชื่อเดียวกันในช่่องขวาของชื่อ Bundle
    • ClassTypes – อันนี้ไม่แน่ใจว่าคือไรครับ
    • Assets – ระบุว่า Bundle ตัวนี้มีไฟล์อะไรอยู่ด้านในบ้าง
    • Dependencies – Bundle ตัวนี้ต้องใช้คู่กับ Bundle ตัวอื่นหรือไม่

จบแต่เพียงเท่านี้ ขอให้ทำเกมให้สนุกนะครับ :)

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post