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

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

Collaboration Tools by

30
Jun
0

เมื่อวันที่ 3 มิถุนาผมได้ไปงาน Collaboration Tools ที่ NE8T มาครับ (ดอง blog มานานมาก ฮ่าๆ) ซึ่งมีการพูดคุยกันว่าในบริษัทๆ หนึ่งมักจะมีปัญหามากมายเช่น

  • มีช่องทางติดต่อพูดคุยระหว่างฝ่ายที่สะเปะสะปะ
  • programmer คุยกับ designer ไม่รู้เรื่อง
  • อีเมล์แจ้งงานคุยกัน สุดท้ายก็ตกหล่น
  • อยากได้ Solution Project Management ในรูปแบบต่างๆ

ก่อนจะเข้าเรื่อง Tools ทุกตัวไม่ได้เหมาะกับคนทุกคน เราต้องระบุปัญหาให้ได้ว่าทีมของเรามีปัญหาอะไร (ไม่ใช่เรามีปัญหาอะไร หรือคิดว่าทีมมีปัญหาอะไรนะ แต่ต้องเป็นเราถามทีมมาแล้วว่ามีปัญหานี้เกิดขึ้นจริง คือเราไม่ได้คิดแทนทีมนั่นเอง)

ภายในงานระบุชื่อ Tools ที่แนะนำอยู่หลักๆ ดังนี้ เนื่องจากผมสนใจพวก Project Management Tools เป็นพิเศษ เลยมานั่งฟังพี่ใหม่พูดต่อหลังเวทีใหญ่พูดจบ เลยได้รายละเอียดส่วนนี้ค่อนข้างมาก ดังนี้

Trello

ข้อดี: เป็น Tools สำหรับกำหนด Task งานต่างๆ สามารถใช้แทนกระดาน Post-it ที่แปะๆ กันได้อย่างดีเยี่ยม คุณสมบัติเด่นคือ Visualize หรือสามารถเห็นทุกอย่างได้พร้อมกันหมด เห็น Process การทำงานว่าอยู่ที่ Step ไหนอยู่ คอขวดอยู่ที่ไหน กำหนดงานที่ต้องส่งต่อๆ กัน เป็น Dependency ได้อย่างดีเยี่ยม เหมาะอย่างยิ่งกับทีมขนาดเล็ก และข้อดีที่สำคัญที่สุดคือใช้งานง่ายมากกกก ไม่ถึงชม.ก็สามารถใช้งานระดับทั่วๆ ไปได้แล้ว Learning Curve ต่ำ การบังคับให้คนมาใช้จึงเป็นเรื่องง่ายตามมา

ข้อเสีย: คือเป็นระบบเปิด ใครก็ทำอะไรนั่นนี่ได้ตามใจชอบ ไม่มี Permission ที่ชัดเจน และสร้าง subtask หรือดู overall งานหลายๆ โปรเจคได้ไม่สะดวกนัก

Asana

ข้อดี: เป็น Tools ที่เหมาะสำหรับงานที่ใหญ่จาก Trello ขึ้นมา มีระบบ Permission เป็นตัวเป็นตนมากขึ้น Assign งานให้คนอื่นได้อย่างชัดเจน (เหมาะกับคนที่ชอบสั่งงานให้คนอื่นว่างั้นเถอะ) ดูหลายๆ โปรเจคพร้อมกันได้ สร้าง subtask ได้ และเหมาะที่สุดคือใช้ระหว่างเจ้านายกับเลขา เพราะเลขาจะ assign สิ่งที่เจ้านายต้องทำในวันถัดไปมา และเจ้านายทำอะไรไปแล้วบ้างก็ต้องมากด Done เพื่อ track ว่าเหลืองานอะไรอีกบ้างได้สะดวก ตอนเริ่มใช้ครั้งแรกจะมีให้เลือกว่าเราจะเอาไปทำงานประเภทไหน เหมือนมี Template ตั้งต้นมาให้ เช่นเอาไปบริหาร CRM ก็ได้ ซึ่งจะมี Timeline เอาไว้ให้ทีมงานคุยกันโดยเฉพาะ แบ่งทีม Sale กับทีม Dev ได้สะดวก

ข้อเสีย: ยังไม่สามารถทำ Project Management ระดับใหญ่ๆ เช่นตั้ง MileStone ของบริษัท การใช้งานค่อนข้างยุ่งยากกว่า Trello มาอีกขั้น ต้องใช้เวลาศึกษาระดับหนึ่งจึงเริ่มใช้งานได้คล่อง

ต่อไปด้านล่างจะเป็น Tools อื่นๆ ที่ไม่ใช่ Project Management นะครับ

Podio

ข้อดี: เป็น Tools ที่ทำได้ทุกอย่างบนโลก (เค้าว่างั้น) โดยจะมีคล้ายๆ App Store ของตัวเอง ซึ่งมีคนทำ Plugin ทั้งฟรีและขายมาให้ในทุกๆ ระบบ สามารถนำระบบโน้นมาผสมกับระบบนี้ได้อย่างอิสระ Custom ได้ทุกรายละเอียด และสามารถทำ Projection ระดับ Milestone ของบริษัท, ตั้งงบประมาณของ Project และแจ้งว่าใช้ไปเท่าไหร่แล้วได้ ใช้ได้ทุกทีมทุกสาขาตั้งแต่ Dev, Sale, Marketing สามารถออกแบบได้ตามใจหมด

ข้อเสีย: Learning Curve สูงที่สุดจากทั้ง 3 ตัวคือ Trello, Asana,Podio ใช้เวลาศึกษานานอาจหลายสัปดาห์หรือเป็นเดือน กว่าจะได้ออกมาเป็นสิ่งที่ต้องการ เนื่องจาก Custom ได้ทุกอย่าง ดังนั้นเราจะต้องจัดวาง ตั้งค่าเองทุกอย่าง ซึ่งกินเวลามากกว่าจะได้ใช้งานตามวัตถุประสงค์

Tools สามตัวบนนี้สามารถ integrate กับ Dropbox, Google Drive, One Drive ได้ทั้งหมด ดังนั้นไม่ต้องกังวลเรื่องการเชื่อมต่อกับไฟล์ที่มีอยู่แล้วในองค์กร ซึ่งสุดท้ายแล้วไม่จำเป็นต้องเลือกแค่ตัวใดตัวหนึ่ง อาจใช้ผสมกันก็ได้ตามความเหมาะสมของงาน จบส่วนของ Project Management Tools มาต่อกับ Tools อื่นๆ บ้าง

Slack

ตัวนี้เป็น Tools สำหรับใชัแทน Facebook Group, Email, Chat ต่างๆ สามารถพิมพ์ # เพื่อสร้าง tag ไว้แบ่งห้องสนทนาได้ โดยสมาชิกแต่ละคนจะสามารถเลือก follow tag ที่เกี่ยวข้องกับตนเองได้ เวลามีคนพิมพ์มาแล้วใส่ tag เช่น “#programmer #sale” คนสองกลุ่มนี้ก็จะเห็นทั้งคู่ ส่งเสริมประสิทธิภาพการทำงานได้อย่างดีเยี่ยม และมี API ให้เราเขียน bot ประจำออฟฟิศเวลาเกิด event ต่างๆ เพื่อแจ้งสมาชิกได้ทีมได้อีกด้วย เค้าว่า Slack มาช่วยดึงคนออกจาก Facebook Group ซึ่งหากบริษัทไหนใช้ Facebook Group อยู่ก็อาจโดน interrupt จากสิ่งต่างๆ ภายใน Facebook ได้ง่าย จึงแยก tools ตัวนี้ออกมาสำหรับด้านทำงานโดยเฉพาะ ส่วน Facebook เค้าอยากให้เอาไว้สำหรับเป็นพื้นที่ส่วนตัวอย่างเดียว ไม่มีเรื่องงานมาเกี่ยวข้อง

Sketch

เป็น Tools สำหรับช่วยออกแบบ UI ที่ดีเยี่ยม ใช้ง่ายมาก พี่ที่ทำ StockRadar บอกว่าขนาดตัวเองเป็นโปรแกรมเมอร์ยังใช้ Sketch ทำ UI ออกมาได้เร็วกว่า Designer ที่ใช้ Photoshop หรือโปรแกรมอื่นๆ ข้อเสียคือมันมีแต่บน Mac เท่านั้นจ้าาา

ทริคเล็กน้อยอื่นๆ

  • harvest ใช้ track เวลาที่ทำแต่ละ taskᅠ
  • quib สำหรับทำ story board
  • เค้าแนะนำให้ดู ted talk เรื่อง post it (ผมยังหา link ไม่เจอ)
  • line เหมาะกับคุย investor เพราะแสดงอารมณ์ได้ชัด ทำให้สนิทกันได้เร็วขึ้นᅠ
  • วิธีทำให้คนใช้ tools คือควรใช้ tools ที่เค้าคุ้นเคยก่อน แล้วค่อยๆ ปรับเปลี่ยนไปใช้ tools ที่ advance มากขึ้นเรื่อยๆ คนจะยอมรับง่ายขึ้นᅠและบอก impact ให้เห็นให้ชัด เพื่อสร้างเสริมความเข้าใจ
  • วิธีทำให้คนใช้ tools อีกวิธีคือให้คนที่มีอำนาจสูงสุดมาใช้ก่อนแล้วจะเกิดการโอนถ่ายข้อมูลจากระบบเก่ามาใช้ในระบบใหม่แล้วพอใช้ๆ ไปสักพัก บอกให้คนข้างล่างรายงานผ่านระบบ โดยที่หัวหน้าก็ monitor อยู่เรื่อยๆสักพักถึงจะมีคนใช้ตามครบ แล้วเกิดประโยชน์สูงสุด หลังจากนั้นหัวหน้าจะหายตัวไปก็ได้ ระบบก็จะรันของมันไปเองแล้ว
  • culture ถ้าเราไม่ manage มัน มันจะ manage เราᅠ
  • No blame culture เป็นสิ่งที่ควรทำ

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