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 ตัวอื่นหรือไม่

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

[Unity3D] เราจะแก้ปัญหา NSURLErrorDomain error -1012 ใน WWW class ของ Unity 5 ใน iOS ได้อย่างไร? by

30
May
0

เนื่องจากตอนนี้ Unity 5 ก็ออกมาสักพักใหญ่แล้ว แถมฟรีอีกตะหาก (ถ้ารายได้ไม่ถึงเป้า) เราก็ควรจะใช้ Unity 5 กันใช่ไหมครับ แต่ช่วงนี้ Unity 5 ได้ทำ bug (อันใหญ่หลวง) เอาไว้ นั่นคือหากเราใช้ WWW class เรียกไปที่ URL ใดๆ ที่เป็น https จะทำให้ไม่สามารถรับข้อมูลจาก URL นั้นๆ ได้เลย จะ WWW class จะแจ้ง error กลับมาว่า

The operation couldn’t be completed. (NSURLErrorDomain error -1012.)

ซึ่งเว็บเกมของผมเป็น HTTPS ทั้งหมดจึงกระทบเต็มๆ และบางคนอาจจะคิดว่าผมไม่พบปัญหานี้หรอก แต่ถ้าคุณต้องมีการเรียก Profile picture จาก  Facebook แล้วละก็ยังไงคุณก็จะถูกบังคับให้เรียกผ่าน HTTPS โดยอัตโนมัติ ถึง URL จะไม่ได้ระบุเป็น HTTPS  ก็ตาม เช่น http://graph.facebook.com/my_facebook_id/picture แต่สุดท้าย Facebook ก็จะ Redirect ไปยังที่อยู่รูปจริงๆ ที่เป็น HTTPS อยู่ดี และทำให้ไม่สามารถแสดงรูป profile facebook ได้ในที่สุด

จริงๆ แล้วปัญหานี้มีการแจ้งกันมาตั้งแต่เดือนมีนาคมแล้ว และ Unity ก็บอกว่าแก้ไปแล้วในเวอร์ชั่น 5.x.x แต่จนแล้วจนรอดก็ยังไม่ได้แก้จริงสักที ณ เวอร์ชั่นปัจจุบัน 5.0.1f ล่าสุดก็ยังไม่ได้แก้ ดังนั้นเราคงจะรอกันไม่ได้ ต้องหาวิธีแก้กันเอง โดยวิธีแก้ก็คือให้สร้างไฟล์ชื่อว่า CustomConnection.mm ขึ้นมา และใส่ code ด้านล่างลงไป

#include "Unity/WWWConnection.h"
@interface UnityWWWCustomRequestProvider : UnityWWWRequestDefaultProvider
{
}
+ (NSMutableURLRequest*)allocRequestForHTTPMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers;
@end
@implementation UnityWWWCustomRequestProvider
+ (NSMutableURLRequest*)allocRequestForHTTPMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers
{
NSMutableURLRequest* request = [super allocRequestForHTTPMethod:method url:url headers:headers];
// let's pretend for security reasons we dont want ANY cache nor cookies
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
[request setHTTPShouldHandleCookies:NO];
return request;
}
@end
@interface UnityWWWCustomConnectionDelegate : UnityWWWConnectionSelfSignedCertDelegate
{
}
@end
@implementation UnityWWWCustomConnectionDelegate
- (NSCachedURLResponse*)connection:(NSURLConnection*)connection willCacheResponse:(NSCachedURLResponse*)cachedResponse
{
// we dont want caching
return nil;
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
[super connection:connection didReceiveResponse:response];
}
@end
IMPL_WWW_DELEGATE_SUBCLASS(UnityWWWCustomConnectionDelegate);
IMPL_WWW_REQUEST_PROVIDER(UnityWWWCustomRequestProvider);

จากนั้นเซพไปที่ Assets/Plugins/iOS/CustomConnection.mm เท่านี้เป็นอันจบ ไม่ต้องไป set path ใดๆ เพิ่มเติม Unity จะจัดการของมันเองต่ออัตโนมัติ โดยหลักการทำงานของมันคือการแก้ไข class WWW ของ Unity ด้วยตัวเราเองผ่าน Plugin เพื่อ bypass cache บางอย่างที่ WWW ทำงานผิดพลาด สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ Manual หน้านี้ครับ

ซึ่งวิธีแก้วิธีนี้ก็มาจากคนของ Unity นั่นแหละมาโพสต์บอกใน Forum ของเขาเองที่มีคนถาม แต่ด้วยเหตุผลประการใดก็ไม่อาจทราบได้ ตัว Unity หลักๆ กลับไม่ถูกแก้ไขเสียทีจนเราต้องมาแก้ไขเองนี่แหละ เท่านี้เป็นอันจบพิธีครับ :)

ว่าด้วยเรื่อง Texture Compression Format หรือวิธีบีบอัด Texture ให้เล็กลง by

30
Apr
0

ปกติเราทำเกมลงมือถือ เราอาจจะพบปัญหาเช่น apk ใหญ่เกิน 50MB เอาลง Google Play ไม่ได้ หรือ Memory ถูกกินไปหมดเครื่องโทรศัพท์ ซึ่งส่วนใหญ่แล้วที่กินพื้นที่ไปมากที่สุดก็ไม่ใช่อะไร มาจากรูปภาพที่ใช้ในเกมหรือ Texture ต่างๆ นั่นเอง ดูตามรูปด้านล่างเลย คือตัวอย่าง Inspector เมื่อคลิกที่รูปภาพ

texture_inspect

เปลี่ยน Texture Type เป็น Advanced ก็จะได้ดังรูป

texture_inspect2

เลือกที่ Format จะมีรูปแบบให้เลือกมากมาย (bpp = bytes per pixel)

  • Automatic Compressed – ตัวนี้หากไม่ได้กด Advance มันคือ Compress เฉยๆ ซึ่งจะเลือก RGBA 16 bit ให้อัตโนมัติ ใช้ได้กับรูปภาพทุกรูปแบบ ทุก device และรองรับ Transparent มีข้อเสียคือพวก Gradient สีจะเละมาก โดยสามารถกินพิ้นที่ 2 bpp
  • RGB DXT1 – ใช้สำหรับอุปกรณ์ที่รองรับ Direct X ซะส่วนใหญ่และอุปกรณ์ที่มีชิป Vivante, Nvidia กินพื้นที่ 0.5 bpp
  • RGBA DXT5 - ใช้สำหรับอุปกรณ์ที่รองรับ Direct X ซะส่วนใหญ่และอุปกรณ์ที่มีชิป Vivante, Nvidia กินพื้นที่ 1 bpp ใช้ transparent ได้
  • RGB ETC1 – รองรับในอุปกรณ์ Android ตั้งแต่ 2.3 ขึ้นไปทุกยี่ห้อไม่ว่าจะใช้ชิปเซ็ตใดก็ได้ เรียกว่ามีโอกาสใช้ได้ก็ใช้ไปเลย วิธีนี้มีข้อเสียหลักคือไม่รองรับ Transparent กินพื้นที่ 0.5 bpp
  • RGB PVRTC 2 bits – 0.25 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA PVRTC 2 bits – 0.25 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGB PVRTC 4 bits – 0.5 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA PVRTC 4 bits – 0.5 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA ATC 8 bits – 0.5 bpp รองรับชิปตระกูล Qualcomm
  • RGBA ETC2 8 bits – 1 bpp ชิป Mali จาก ARM
  • RGB + 1-bit Alpha ETC2 4 bits – 0.5 bpp ชิป Mali จาก ARM
  • ASTC ทั้งหลาย – ไม่แนะนำให้ใช้เนื่องจาก เครื่องที่ไม่ support จะกิน memory มากกว่าปกติเสียอีก

กล่าวโดยสรุปแล้วหากเป็นรูปที่ไม่มี transparent ควรใช้ etc1 สำหรับ android และ pvrtc สำหรับ ios ซึ่งสามารถแยกได้จาก setting ใน inspector ของตัว unity เองอยู่แล้ว แต่หากมี transparent อาจเลือกรูปแบบ RGBA สักอันที่ไม่ใช่ ASTC ซึ่งถึงแม้ว่า hardware จะไม่ support แต่ขนาด memory และพื้นที่ apk ที่ใข้ก็จะยังคงเล็กลงอยู่ โดยยังมีข้อเสียอยู่คือ unity จะใช้ software ในการ decode แทน ส่งผลให้การแสดงรูปช้ากว่าปกติ ซึ่งถ้ารูปที่โหลดติดหน้า Loading อยู่พอดีอยู่แล้วก็อาจจะไม่เป็นไรนัก ทั้งนี้ขึ้นกับผู้พัฒนาจะตัดสินใจเองว่าจะยอมให้รูปโหลดช้าลงเล็กน้อยแลกกับพื้นที่เก็บเล็กลงหรือไม่ หากยอมไม่ได้จริงๆ คงจะเหลือแค่ RGBA 16 bit เท่านั้นที่พอจะทำได้ แล้วแต่ตัดสินใจครับ ขอให้โชคดี :)

ติดตั้ง Facebook SDK บน Unity อย่างไร by

30
Mar
0
  1. Download เวอร์ชั่นล่าสุดจาก https://developers.facebook.com/docs/unity/downloads
  2. Double Click Unity package ใส่ใน Project ที่เราจะ setup
  3. เมื่อสำเร็จแล้วจะมีเมนู Facebook โผล่มาอยู่ข้างๆ Component (ของผมลง NGUI ด้วย เลยอยู่ข้าง NGUI)
    Unity Menu
  4. คลิก Facebook -> Edit Settings แล้วดูที่ Inspector กรอก App Name (อะไรก็ได้) และ App Id จาก Facebook มีสองเวอร์ชั่น (production, development) ก็ใส่เพิ่มได้สองอัน แล้วจะเลือกอันที่จะใช้ได้
  5. สังเกตว่ามีการเตือนตามรูปด้านล่างรึเปล่า ถ้ามีให้ทำตามข้อ 6-9 ต่อ ถ้าไม่มีข้ามไปข้อ 10 เลย (ส่วนใหญ่จะเกิดกับเครื่อง Windows)
    20644-warning
  6. Download OpenSSL จาก http://slproweb.com/products/Win32OpenSSL.html โดยเลือก Win32 OpenSSL vx.x.x หรือ Win64 OpenSSL vx.x.x ตามแต่ระบบปฏิบัติการของเรา (อย่าเลือก Light version ให้ลงตัวเต็ม) แล้ว Install ให้เรียบร้อย
  7. จะ Install OpenSSL ได้ต้องใช้ Microsoft Visual C++ 2008 Redistributable Package (x86) ด้วยนะ โหลดมาให้เรียบร้อยถ้ายังไม่ได้ลงไว้
  8. เข้า Control Panel > System > Advanced system settings > Environment Variables เลือก Variable “Path” ใน “System variables” พิมพ์ “;C:\OpenSSL-Win64\bin” (ค่าตรงนี้อาจไม่เหมือนกัน ขึ้นกับว่าตอน Install เรา Install OpenSSL ไว้ที่ไหนก็ให้ใส่ Path ไปหาที่นั่นต่อด้วย \bin) ต่อท้าย ไปแล้วเซพค่า ปิดเปิด Unity ใหม่ 
  9. ถ้าขึ้นว่า Keytool not found ต้อง Add Path JDK ลงตัวแปร Path ต่อท้ายตามในข้อ 8 ไปด้วย เช่น “C:\Program Files\Java\jdk1.7.0_45\bin” (เปลี่ยนเลขเวอร์ชั่นและ path ให้ถูกต้องตามที่ setup ไว้)
  10. สังเกตที่ Debug Android Key Hash หากมีการ Install OpenSSL ไว้ถูกต้องจะมีตัวหนังสือ Hash แสดงออกมา หาก Install ผิดพลาดจะไม่เห็นตัวหนังสืออะไรเลย ให้พยายาม Install OpenSSL ใหม่ ให้ Copy เอาไว้
  11. กดปุ่ม Regenerate Android Manifest ข้างใต้หนึ่งครั้ง
  12. เข้าไปที่ https://developers.facebook.com/ เลือก App ที่เราสร้างไว้ อันเดียวกับ app id ที่กรอกไปก่อนหน้า แล้วเข้าเมนู Settings ทางซ้าย
  13. ดูส่วนที่เป็น Android ถ้ายังไม่มีก็กด Add Platform ซะ กรอก
    • Google Play Package Name – ชื่อ Package app เราเอง
    • Class Name – ใส่ว่า com.facebook.unity.FBUnityDeepLinkingActivity
    • Key Hashes – เอาค่าจากข้อ 10 กรอกไป
  14. กด Save Changes เป็นอันเสร็จพิธี ใช้งาน Facebook SDK บน Unity ได้แล้วจ้าาา
  15. [แถม] สำหรับ iOS ถ้าเป็น Unity5 จะมีปัญหาตอน Build ให้ไปที่ไฟล์ Assets/Facebook/Editor/iOS/FbUnityInterface.mm และ FbUnityInterface.h ด้วย โดยคลิกเลือกที่สองไฟล์นี้ทีละไฟล์แล้วที่ Inspector ติ๊กที่ iOS คลิก Tab ที่เพิ่มมาใต้ Platform settings จะมีส่วนที่เขียนว่า Compile flags อยู่ ให้พิมพ์ว่า “-fno-objc-arc” กด Apply ทั้งสองไฟล์ก็จะสามารถ Build ลง iOS ได้ตามปกติครับ

[Unity3D] Asset Bundle คืออะไร? by

31
Jan
1

Screenshot_2015-01-31-13-35-02

ปกติเราเคยเล่นเกม แล้วเห็นเกมอื่นเขาสั่ง Download Content มาเพิ่มตอนเข้าเกมครั้งแรกไหม? แล้วทำไมเขาถึงไม่รวมเข้าไปให้ดาวน์โหลดตั้งแต่อยู่ใน Store เลยล่ะ? ทำไมต้องแยกให้ผู้เล่นรอโหลดสองรอบ? จริงๆ แล้วส่วนที่ Download เพิ่มก็คือ Asset Bundle นี่เองซึ่งเป็น Content เพิ่มเติมของเกมเช่น ตัวละครใหม่ ไอเท็มใหม่ ด่านใหม่ สำหรับสาเหตุที่จำเป็นต้องใช้ asset bundle คือ

  1. Google Play มีการจำกัดขนาดไฟล์ apk ที่จะให้เอาขึ้น Store ได้ 50 MB และส่วนที่เหลือต้องแยก expansion file ส่วน ios จะจำกัดที่ตัว .app ไม่เกิน 60MB ซึ่งจะทำให้ flow การทำงานไม่เหมือน ios และ android ไม่เหมือนกัน การใช้ Asset Bundle จะมาช่วยจัดการความต่างตรงนี้ได้
  2. เมื่อเรา update เกมเพื่อแก้ไข bug แต่ content รูปภาพต่างๆ ยังเหมือนเดิม ผู้เล่นจะต้อง download ใหม่แค่เพียงตัว app ไม่ต้อง Download content ใหม่ทั้งหมด เพียงเพื่อแก้ไขข้อผิดพลาดเล็กๆ น้อยๆ จาก 500 MB(app รวม content model 3 มิติ รูปภาพ) ลดเหลือ 50 MB (ตัว app อย่างเดียว) จะเป็นจุดต่างอย่างมาก
  3. สามารถเพิ่ม content ใหม่ๆ ได้โดยไม่ต้องเอาขึ้น app store/google play store ซึ่งปกติเวลา approve ของ app store จะเฉลี่ยที่ 7 วัน ทำให้ไม่ต้องรอเวลาตรงนี้ถึงจะปล่อย patch update เกมด่านใหม่ๆ ได้ เพิ่มความสะดวกเป็นอย่างมาก

จะเห็นได้ว่ามีประโยชน์มากจริงๆ ดังนั้นเรามาดูกันว่าจะสร้าง Asset Bundle มาใช้งานได้อย่างไร


// C# Example
// Builds an asset bundle from the selected objects in the project view.
// Once compiled go to "Menu" -> "Assets" and select one of the choices
// to build the Asset Bundle
using UnityEngine;
using UnityEditor;
public class ExportAssetBundles {
   [MenuItem("Assets/Build AssetBundle From Selection - Track dependencies")]
   static void ExportResource () {
      // Bring up save panel
      string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
      if (path.Length != 0) {
         // Build the resource file from the active selection.
         Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
         BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path,
                      BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildAssetBundleOptions.CollectDependencies , BuildTarget.Android);
         Selection.objects = selection;
      }
   }
   [MenuItem("Assets/Build AssetBundle From Selection - No dependency tracking")]
   static void ExportResourceNoTrack () {
      // Bring up save panel
      string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
      if (path.Length != 0) {
         // Build the resource file from the active selection.
         BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, path, BuildAssetBundleOptions.CollectDependencies , BuildTarget.Android);
      }
   }
}

ให้เรา Copy Code ข้างบนไปเซพไฟล์ใหม่ชื่อ AssetBundleCreator.cs (หรือชื่ออื่นก็ได้) แล้วสร้าง Folder ใหม่ใน Folder Assets ใน project ของเราชื่อว่า Editor นำไฟล์ AssetBundleCreator.cs ไปใส่ด้านใน จากนั้น ให้คลิกเลือก Resource รูปภาพที่จะนำมาสร้างใน tab project ด้านล่าง ต่อด้วยคลิกที่เมนู Asset จะเห็นดังภาพ

AssetBundleMenuOptions

1. Build AssetBundle From Selection – Track dependencies คือสร้าง asset bundle โดยพ่วงเอาทุกอย่างที่เลือกแถมมาด้วย เช่นเลือกรูปภาพ 1 รูปแล้วเลือกเมนูนี้จะได้ Texture2D และ Sprite มาทั้งคู่ใน bundle (แน่นอนว่าขนาดไฟล์ที่ได้จะใหญ่กว่า)
2. Build AssetBundle From Selection – No dependency tracking คือสร้าง asset bundle โดยสร้างแค่เฉพาะของที่ใส่ลงไปใน bundle เช่นเลือกรูปภาพ 1 รูปแล้วเลือกเมนูนี้จะได้ Texture2D อย่างเดียวมาใน bundle

สิ่งที่ต้องระวังในการใช้งาน asset bundle คือตอนสร้างเราจะต้องเลือกสร้างบน platform ใด platform หนึ่งเช่น สั่งสร้าง asset bundle for android ก็จะใช้ได้กับ android เท่านั้น ใช้กับ ios ไม่ได้ ดังนั้นหากต้องการ update content เกมทั้งสอง os จะต้องสร้าง bundle มา 2 ไฟล์แยกกัน โดยแก้ไขส่วนของ BuildTarget.Android เป็น BuildTarget.iPhone ตามแต่ os

สำหรับวิธีเรียกไปใช้งานก็ตาม code ด้านล่าง

using UnityEngine;
using System.Collections;
public class BundleLoader : MonoBehaviour{
    public string url;
    public int version;
    public IEnumerator LoadBundle(){
        using(WWW www = WWW.LoadFromCacheOrDownload(url, version){
            yield return www;
            AssetBundle assetBundle = www.assetBundle;
            GameObject gameObject = assetBundle.mainAsset as GameObject;
            Instantiate(gameObject );
            assetBundle.Unload(false);
        }
    }
    void Start(){
        StartCoroutine(LoadBundle());
    }
}

ขอให้สนุกกับการทำเกมนะครับ :)

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน