[Unity3D] เพิ่ม Game Center ลงเกมของเรา by

30
Jun
0

วิธี setup Game Center และใส่ Archivement ลงใน Game Center ตามนี้เลยครับ

Setup ที่ iTune Connect

1. เข้าไปที่ iTune Connect

2. เลือก app ของเรา (ถ้ายังไม่ใส่ app ลง iTune Connect จะทำ Game Center ไม่ได้เลย)

gamecenter1

3. กดเมนู Features ตามด้วย Game Center ดังรูปด้านบน

gamecenter2

4. กด Add Achievement ตามรูป (ถ้าอยากใส่ Leaderboard ด้วยก็ต้องใส่ข้อมูล Leaderboard ด้วยตรงนี้)

5. มีข้อมูลต้องกรอกดังนี้

  • Achievement Reference Name – ชื่อที่เอาไว้ดูในเว็บ iTune Connect เท่านั้น ไม่มีการเชื่อมต่อกับส่วนอื่น
  • Achievement ID – ชื่อที่ใช้อ้างอืงกับเกมของเรา เวลาเราสั่ง Achievement ไหนเสร็จก็จะต้องอ้าง string ตัวนี้ ใช้ได้เฉพาะตัวอักษรอังกฤษ, ตัวเลข, -, _ ห้ามมีตัวอักษรอื่นนอกเหนือจากนี้รวมถึง spacebar
  • Point Value – ถ้าทำสำเร็จจะได้กี่แต้ม ตรงนี้ต้องระวังหน่อยใส่ได้สูงสุด 100 และรวมทุก Achievement ห้ามเกิน 1000 คะแนนตรงนี้จริงๆ เกมเราไม่ได้เอาไปใช้อะไรหรอก แต่สำหรับผู้เล่น มันจะมีคะแนนที่สะสมมาจากเกมอื่นที่ไม่ใช่ของเรามารวมด้วย และจัดอันดับของทั้ง Game Center รวมกันหลายๆ เกมอีกที ในส่วนนี้สมมติตั้งว่าได้ 10 คะแนน แต่คนเล่น progress ไป 50% แล้ว แต่ยังไม่สำเร็จก็จะยังไม่ได้แต้ม (ไม่ใช่ว่าได้ 5 แต้มไปก่อนแล้ว) ต้องทำ progress ครบ 100 ถึงจะได้ 10 คะแนน
  • Hidden – แสดงให้ผู้เล่นรู้ไหมว่ามี Achievement นี้อยู่
  • Achievable More Than Once – ทำซ้ำได้มากกว่า 1 ครั้งไหม

6. ข้อมูลส่วน Add Language มีดังนี้

  • Language – ภาษา
  • Title – หัวข้อที่จะแสดงเวลาผู้เล่นทำสำเร็จครบ 100% แล้วมี status แสดงว่าสำเร็จแล้ว (Hero, Great Warrior ชื่ออะไรที่อยากให้คนเล่นเห็นก็ว่าไป)
  • Pre-earned Description – ก่อนจะได้ Achievement ให้แสดงข้อความข้างใต้ Title อย่างไร อาจใส่เป็นคำใบ้ว่าต้องทำอย่างไรถึงจะได้ Achievement นี้ก็ได้
  • Earned Description – หลังได้ Achievement ให้แสดงข้อความข้างใต้ Title ว่าอย่างไร
  • Image – รูปที่แสดง ขนาด 512×512 px หรือ 1024×1024 px โดยจะถูกตัดขอบเป็นวงกลมให้เสมอ

7. หลังกด Save แล้วก็ Add Achievement อื่นๆ วนซ้ำไปเรื่อยๆ จนกว่าจะครบตามต้องการ

8. เข้าเมนู App Store

gamecenter3

9. กดเพิ่ม version เกมอันใหม่แล้วเลือก Enable Game Center ตามรูปซะ และ Select All Achievement หรือ Leaderboard ที่สร้างมาให้ครบเพื่อรับการ Review

10. Submit App ตัวใหม่ที่ implement Game Center แล้วเรียบร้อยขึ้น Store

Unity Coding

สำหรับด้าน Coding ของ Unity ไม่จำเป็นต้องติดตั้ง Library ใดๆ เพิ่ม สามารถใช้งานได้เลยโดยมีเพียงเล็กน้อยดังนี้

using UnityEngine;
using UnityEngine.SocialPlatforms;
public class GameCenter : MonoBehaviour {
public static GameCenter instance;
public bool IsLogin = false;
void Awake() {
instance = this;
}
// Use this for initialization
void Start () {
// Authenticate and register a ProcessAuthentication callback
// This call needs to be made before we can proceed to other calls in the Social API
#if UNITY_IOS
GameCenterPlatform.ShowDefaultAchievementCompletionBanner(true);
Social.localUser.Authenticate(ProcessAuthentication);
#endif
}
// This function gets called when Authenticate completes
// Note that if the operation is successful, Social.localUser will contain data from the server.
void ProcessAuthentication(bool success)
{
if (success)
{
IsLogin = true;
}
}
}

Copy ไปสร้างไฟล์ใหม่ชื่อ Game Center แล้วลาก Script ไปแปะที่ Scene แรกสุดได้เลย ในส่วนนี้คือคำสั่ง Login user เข้า Game Center สำหรับคำสั่งที่จะส่ง progress ไปยัง Game Center ใช้แค่ดังนี้

Social.ReportProgress(achievementId, 100f, delegate(bool result) {
if (result)
Debug.Log("Successfully reported achievement progress");
});

ง่ายดายมากๆ เพียงส่ง string ตัวแปร achievementId ไปให้ตรงกับที่สร้างไว้บน iTune Connect และ parameter ตัวที่สองคือ progress ซึ่งจะมีได้ตั้งแต่ 0-100 เท่านั้น (ไม่ว่า Point Value จะเป็นเท่าไรก็ตาม) ถ้าทำสำเร็จจะมี popup เลื่อนมาแสดงว่าสำเร็จแล้ว

ในส่วนของการแสดง Game Center Interface ภายในเกมของเราทำได้โดยสั่ง

Social.ShowAchievementsUI() หรือ Social.ShowLeaderboardUI() ตามแต่ต้องการว่าจะแสดงอะไร

หากต้องการ Reset Achievement ที่ทำไปแล้วทั้งหมดทำได้โดยสั่งดังนี้

GameCenterPlatform.ResetAllAchievements( (resetResult) => {
Debug.Log( (resetResult) ? "Reset done." : "Reset failed." );
});

การทดสอบ

IMG_0152

สำหรับ iOS ตั้งแต่เวอร์ชั่น 9 เป็นต้นไป ไม่ต้องทำอะไรก็สามารถทดสอบได้เลย แต่หากเป็น iOS เวอร์ชั่นตำกว่า 9 จะต้องเข้าหน้า Setting -> Game Center เพื่อปรับ Sandbox ให้เป็น Enable ก่อนดังภาพ และต้อง Sign Out account game center เพื่อใช้งาน Account Sandbox ตอนเข้าเกม (ถ้ายังไม่มีต้องสร้างที่ iTune Connect เข้าเมนู Users and Roles -> Sandbox Testers) เมื่อเตรียมการเรียบร้อยก็เข้าเกมเราไปทดสอบ ลองดูเลย ถ้าเจอ popup Welcome to Game Center โผล่มาก็แสดงว่าสำเร็จ ถ้าไม่มีก็ต้องตรวจสอบขั้นตอนใหม่ว่ามีอะไรผิดพลาดบ้าง ขอให้โชคดีครับทุกท่าน :)

Unity3d trick: เราจะเก็บค่าตัวแปรใน Inspector ไม่ให้หายไปเมื่อเราเปลี่ยนชื่อตัวแปรได้อย่างไร? by

31
May
0

ไม่ว่าใครใช้ Unity ก็คงจะมีปัญหาโลกแตกนี้คืออยากจะเปลี่ยนชื่อตัวแปร public ที่ปรากฏใน Inspector แต่ปรากฏว่าค่าต่างๆ ที่เคยใส่ไว้ รวมไปถึง GameObject ต่างๆ ที่เคยลากมาแปะลงในตัวแปรไว้จะหายไปหมด ถ้าเปลี่ยนชื่อตัวแปรเป็น 10 ตัว ค่าทั้ง 10 ตัวก็จะหายไปหมด มันช่างน่าเบื่อเสียจริงๆ ที่ต้องมาใส่ค่าพวกนี้ใหม่ วันนี้เรามีทางออกสำหรับปัญหานี้แล้ว สมมติเรามี Code ดังนี้

inspector2

ก็จะได้ Inspector ดังรูป

inspector

ถ้าอยากจะเก็บค่าตัวแปรเดิมไว้ก็ทำแบบนี้ครับ

inspector3

ก็จะได้แบบนี้

inspector4

หลังจากนั้นเอาส่วนของ [FormerlySerializedAs("MyValue")] กับ [FormerlySerializedAs("MyGameObject")] ออกก็ได้ค่าก็จะยังคงอยู่ตลอดไป เป็นไงละครับ ง่ายดีไหม :)

ที่มา: https://www.facebook.com/GameTorrahod/photos/pcb.1101786133215513/1101784646548995/?type=3&theater

Trello Shortcut by

30
Apr
1

ผมก็ใช้ Trello มาได้ 3 ปีแล้วมั้ง แต่ไม่เคยดู shortcut มันเลย เรื่องเริ่มมาจากผมอยากจะแทรก card ไว้ที่ด้านบนสุดของแต่ละ Column เพื่อแสดงว่าเป็น Priority ของสิ่งที่ต้องทำก่อน เลย Search Google ได้ใจความว่ามีสองวิธี วิธีแรกคือกดที่มุมขวาบนแล้วกด Add Card ก็จะโผล่มาบนสุดให้เอง (ง่ายๆ แค่เนี้ย? ปกติกดแต่จากด้านล่างเลยโผล่ล่างสุดตลอด) วิธีที่สองคือใช้ shortcut ครับ โดยเอา Mouse ไปชี้ที่ตำแหน่งการ์ดที่ต้องการจะแทรกระหว่างกลางแล้วกดปุ่ม N มันก็จะ New Card มาที่ระหว่างกลางให้โอ้!!! มันง่ายอะไรเพียงนี้!!! เลยเป็นที่มาของ blog นี้ครับ สรุป shortcut ที่น่าสนใจ

trello1

 

  • N – สั่งเพิ่ม Card อย่างที่บอกข้างบนตามตำแหน่ง cursor mouse
  • ปุ่มลูกศร – ย้าย cursor ไปเลือกการ์ดต่างๆ เหมาะสำหรับทำอะไรซ้ำๆ กับการ์ดเรียงทีละอัน
  • / – เหมือนสั่งเตรียมพิมพ์ที่กล่อง search (มาจาก vi ชัดๆ)
  • C – Archive card
  • E – Quick Edit ที่ card ที่ cursor mouse ชี้อยู่
  • Enter – เปิด Card
  • L – ใส่ label สีต่างๆ โดยต้องกด L ตามด้วย 0-9 เป็นเลขสีตามลำดับ
  • M – Add/Remove Member
  • < > – ขยับ Card ไปคอลัมภ์ซ้ายหรือขวา
  • Q – เลือก Filter โชว์เฉพาะการ์ดที่ assign หน้าเรา
  • Space – ใส่ชื่อตัวเองลง Card
  • T – Edit Title
  • X – ปิด Filter ทั้งหมด
  • ? – เปิดดูว่ามี shortcut อะไรบ้างให้เลือก
  • @ – Auto Complete Member โผล่มาให้เลือก
  • # – Auto Complete Label โผล่มาให้เลือก

Storage Engine ของ MongoDB by

31
Mar
0

MongoDB คือ NoSQL ที่ได้รับความนิยมสูงมากในช่วงหลายปีที่ผ่านมา แทบจะเป็นเบอร์หนึ่งในงานทั่วๆ ไปแล้วละมั้ง (แต่ผมยังยินยันเหมือนเดิมว่าไม่ควรใช้โดยที่ไม่มองทางเลือกอื่นก่อน มันไม่สามารถแทน MySQL ได้ 100% จึงควร Choose the right thing at the right job นะครับ อ่านเพิ่มเติมได้ที่บทความเก่าที่นี่) สำหรับคนที่ไม่ได้ตามข่าว ตั้งแต่ MongoDB 3.0 เป็นต้นมา MongoDB ได้ปรับปรุงระบบใหม่ เพิ่มระบบ Storage Engine เข้ามา คล้ายกับ MySQL ที่มี MyISAM และ InnoDB ให้เลือก หรือจะเปลี่ยนเป็น Storage Engine ตัวอื่นก็ได้ตามอิสระ

Storage Engine พูดง่ายๆ ก็คือวิธีการเก็บข้อมูลว่าจะเก็บในรูปแบบไหน อย่างไร ซึ่งเราสามารถ Download Storage Engine จากผู้พัฒนารายอื่นมาเชื่อมต่อได้อย่างอิสระให้เหมาะสมกับลักษณะงานของเราได้ ปัจจุบันมี Storage Engine ดังนี้

engines-timeline

  1. MMAPv1 – แถมมากับ MongoDB ซึ่งถูกใช้งานมาอย่างยาวนานตั้งแต่ MongoDB version แรกจนปัจจุบัน และตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป จะไม่ใช่ default engine อีกต่อไป หลักการทำงานคือใช้ Memory Map ของ OS มาเป็นตัวช่วยจัดการ Memory ให้ทั้งหมด ไม่มีระบบจัดการ Memory เป็นของตัวเอง ทำให้สมัยก่อนขึ้นชื่อเรื่องสวาปาม Ram อย่างมาก และห้ามมี application ตัวอื่นรันพร้อมๆ กันในเครื่องเดียวกันเด็ดขาด หากต้องการใช้ MongoDB หนักๆ ควรแยกเครื่องออกจากกันซะ มิเช่นนั้น application อื่นๆ จะโดนดูด Ram จนหมดตัว (น่ากลัวไหมล่ะ) และยังมีข้อจำกัดอีกมากมายเช่น ไม่มีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้นอกจากกิน Ram เยอะมากแล้วยังกิน Disk เยอะมากอีกตะหาก และ Collection ของระบบนี้ (เทียบได้กับ Table ใน MySQL) จะไม่มีระบบ Lock เฉพาะ Document เวลาแก้ไข (Document เทียบได้กับ row ใน table) เวลาโดน Lock จะ Lock ทั้ง Collection ซึ่งส่งผลเสียอย่างมากหากต้องมีการแก้ไขข้อมูลเยอะๆ ปัจจุบันไม่แนะนำให้ใช้งานครับ
  2. WireTiger – เป็น Storage Engine น้องใหม่ที่มาจากการที่ MongoDB ไปซื้อบริษัท WireTiger ผนวกรวมเข้ากับตัวเอง และปัจจุบันเป็น Default Storage Engine ตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป แก้ไขปัญหาของ MMapv1 ไปหลายอย่างเช่นมีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้ขนาดไฟล์เล็กลง 10 เท่า!! และมีการ Lock ที่ระดับ Document ทำให้ไม่ต้องแย่ง resource กันเวลา update ไม่เกิดการรอกันไปมามากเกินไป และหาก Data Set สามารถยัดลง Memory ได้พอ WireTiger จะเป็น Storage Engine ที่เร็วที่สุดและดีที่สุด! แต่ถ้าข้อมูล Data Set ใหญ่กว่า Memory ความเร็วการใช้งานจะช้าลงเรื่อยๆ อย่างมีนัยยะเลยทีเดียวซึ่งจะหลายเป็น Binary Tree Engine ธรรมดาๆ ไป จึงช้าลง
  3. PerconaFT – เป็น Storage Engine ที่ต้อง download เป็น MongoDB เวอร์ชั่นพิเศษจากเว็บ percona และจะมีเลขเวอร์ชั่นและ feature ตามท้าย MongoDB ตัวหลักอยู่ประมาณหนึ่ง (ปัจจุบันเป็น MongoDB 3.0 ตามหลังเวอร์ชั่นหลักคือ 3.2) เมื่อก่อนชื่อ TokuMX และโดน Percona ซื้อไป เปลี่ยนชื่อใหม่เป็น Percona for MongoDB ตัวนี้มีจุดเด่นคือมี Percona เป็น Back ซึ่งเชี่ยวชาญด้านการ Modify Database ดังๆ มาปรับปรุงให้เทพขึ้น (เช่น MySQL ซึ่งผมใช้อยู่ และติดงอมแงม) และมี Tools ของตัวเองมาช่วยมากมายเช่น Tools ที่ช่วยเรื่อง Hot Backup และ Tools อื่นๆ ที่ช่วยให้ชีวิต DBA ง่ายขึ้นตามมา จุดเด่นอีกอย่างคือนอกจากจะมีทั้งการบีบอัดข้อมูล, Document Level Lock เหมือน WireTiger แล้วยังปรับปรุงเรื่องความเร็วหาก Data Set มีขนาดใหญ่กว่า Memory โดยจะยังรักษาความเร็วไว้ได้อย่างคงที่ เพราะใช้เทคโนโลยีส่วนตัวที่ชื่อว่า Fractal Tree ซึ่งผมเองเลือกใช้ตัวนี้ครับ สาเหตุหนึ่งเพราะผมเป็นติ่ง Percona มาตั้งแต่ MySQL แล้วด้วย 555
  4. RocksDB – Storage Engine น้องใหม่จาก Facebook เป็นการันตี สร้างขึ้นจาก LevelDB ซึ่งเป็นฐานข้อมูลแบบ key-value ที่ open source จาก Google ถ้า Download จาก website Percona ก็จะแถม Engine ตัวนี้มาให้เลือกเลยโดยไม่ต้อง setup เพิ่มเช่นกัน ใช้ LSM Tree ในการเก็บข้อมูล ทำให้ Write ได้เร็วกว่า PerconaFT เหมาะกับการเก็บ Log มาก แต่แลกกับการที่ Read ข้อมูลได้ช้ากว่า PerconaFT

หากใครมี use case แบบไหนก็เลือกใช้ให้เหมาะสมกับตัวเองนะครับ ขอให้โชคดี :)

อ้างอิงข้อมูล:

https://www.percona.com/blog/2015/12/23/percona-server-for-mongodb-storage-engines-in-iibench-insert-workload/
https://www.percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/
https://www.percona.com/blog/2016/01/11/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-2/
https://www.percona.com/blog/2016/01/20/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-3/
https://www.percona.com/blog/2016/01/27/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-4/

Mobile Notification ทำกันยังไง? by

29
Feb
0

Notification ใน Mobile ปกติจะแบ่งออกเป็น 2 ประเภทหลักได้แก่

  1. Local Notification – หรือการแจ้งเตือนภายในเครื่อง ส่วนนี้เป็นการยิง API ไปบอกกับ OS ว่าขอ “ตั้งเวลา” ส่ง Notification ในเวลากี่โมง เมื่อตั้งแล้วถึงเวลาที่กำหนด ระบบจะส่งข้อความแจ้งเตือนตามที่ตั้งไว้ หากเป็น Unity3D แนะนำ Plugin 2 ตัวนี้ครับ Unity Android Notification (ฟรี) และ Cross Platform Native Plugin ($45.99) แบบเสียตังสำหรับคนขี้เกียจ และสำหรับ iOS แบบฟรีก็มีเช่นกันคือตัว Unity มี API ให้เองเลย ดูได้ที่ Doc Unity หน้านี้ (function RegisterForNotifications และ ScheduleLocalNotification)
    การใช้งานตรงส่วนนี้มักใช้กับการเตือนที่รู้เวลาล่วงหน้าเช่น เตือนว่า Energy เต็มแล้ว เตือนว่าถึงเวลาเริ่ม tournament ประจำสัปดาห์แล้วเป็นต้น
  2. Push Notification – หรือการแจ้งเตือนโดยส่งข้อมูลจาก server ไปยังเครื่องมือถือ โดยมักใช้ในการแจ้งข่าวสารใหม่ๆ ของเกมหรือเตือนให้กลับไปเล่นเกมกรณีไม่ได้เล่นมานาน อันนี้แน่นอนว่าส่งข้อมูลจาก server เราก็ต้องมี server ตัวเองใช่มะ แต่ไม่ต้องครับ!! เพียงเราใช้บริการจาก OneSignal ปัญหาทุกอย่างจะหมดไป!! ส่วนราคาค่าบริการ และ Feature ก็ตามรูปเลยครับ
    onesignal

เดี๋ยวๆๆๆ ใช่แล้ว ทั้งหมดนี้ฟรีและ Unlimit!! เห้ยจริงดิ!! ซึ่งสาเหตุที่เค้าให้บริการฟรีได้เพราะแต่ก่อนเค้าก็เคยเก็บตัง แต่ตั้งแต่มีนายทุนมาลงทุนเพิ่ม ปรากฏว่าตอนนี้เลยกลายเป็นฟรีไปหมด และ Feature เยอะมากๆๆๆๆ ไม่น่าเชื่อว่าจะฟรีเลยทีเดียว ไม่ต้องห่วงว่ามันจะหลอกลวงไหมเพราะเจ้าใหญ่ๆ ใช้กันเพียบ เช่น Uber, Zynga, 9gag, MTV มันดียังไงบ้างน่ะเหรอ ผมเพิ่มเติมให้อีกดังนี้

  • สมัครง่ายมาก ทุกขั้นตอนมีบอกวิธีการติดตั้งอย่างละเอียดยิบ แถมมีปุ่มให้ทดสอบยิง Notification ตั้งแต่ยังติดตั้งยังไม่เสร็จด้วย แล้วบอกให้เสร็จสรรพว่าเราลืม set อะไรตรงไหน โอ้วววว
  • บอกขั้นตอนการตั้งค่าที่เว็บ Google และ Apple ให้ละเอียดยิบว่าต้องตั้งค่าโปรเจคอย่างไรบ้าง มีรูปประกอบพร้อม
  • ตั้งค่า cer ของ apple ไม่ได้สักที? ไม่เป็นไร เรามีบริการ setup cer ให้อัตโนมัติ เพียงกรอก apple id/password เดี๋ยวเราจัดให้ (ใครกลัวมันเอา account เราไปทำอะไรก็เปลี่ยน password ก่อนกรอก แล้วค่อยเปลี่ยนกลับได้ครับ)
  • มี Chat เด้งๆ มาบอก มีข้อสงสัยอะไรถามเราได้เลยนะ เราพร้อมตอบเสมอ โอ้ววววว
  • setup push notification จนใช้งานได้เรียบร้อย ทดลองยิงๆ ไป 4-5 ครั้ง มีเมล์มาถามบอกเราพบว่าคุณได้ทำการติดตั้งสมบูรณ์แล้ว หากพบความไม่สะดวกหรืออยากติชมอะไรให้แจ้งมาได้เลย โอ้าวววว
  • มี Analytic เช็คให้ Real time ว่ายิง notification ไปทั้งหมดเท่าไหร่ มีคนคลิกมาเท่าไหร่ ไม่ต้องเขียนเอง!
  • มี A/B Testing ให้พร้อม ยิง notification ต่างรูปแบบกันสำหรับลูกค้าคนละกลุ่มเพื่อทดสอบข้อความว่าดึงดูดได้ดีแค่ไหน
  • แบ่งกลุ่มลูกค้าเพิ่อแจ้งเตือนได้อิสระ เช่น ยิงเตือนลูกค้าที่ไม่ได้ใช้ app เรามานานแล้วได้เลย ไม่ต้องทำไรเพิ่มมากมาย!!
  • ยิงสั่งงานจาก server ของเราเองก็ได้หากมี event พิเศษที่ต้องการยิง เช่นจะทำ app line chat พอมีคนส่งข้อความมาแล้วมี push notification ก็ทำได้ง่ายดาย
  • ฟรี และ ฟรี และ ฟรี (คือมันดีกว่า Service เสียเงินที่เคยใช้อีกอะ พูดเลย บริการดีเวอร์ Google SDK ต่างๆ ยังติดตั้งไม่ง่ายเท่านี้)

สำหรับวิธีติดตั้งคร่าวๆ ฉบับภาษาไทยอ่านได้ที่ blog นี้ครับ ขอให้ทุกคนโชคดีครับ :)