[TH] การสแกน QR Code และแสดงวัตถุสามมิติใน Unity3D

สำหรับสุดยอดโปรแกรมสร้างเกมอย่าง Unity3D แล้วนั้นมีจุดเด่นมากมายดังที่เคยกล่าวไป ซึ่งข้อหนึ่งนั้นคือการที่โปรแกรมสามารถสร้างเกมได้ในแทบทุกแพลตฟอร์มไม่ว่าจะเป็น คอมพิวเตอร์หรือมือถือ ซึ่งในบทความนี้จะกล่าวถึงการใช้งานบนมือถือ ซึ่งแน่นอนว่าต้องมีอุปกรณ์ที่คอมพิวเตอร์ไม่มีเช่น กล้อง โดยจะกล่าวถึงวิธีการแสกน QR Code เพื่อสั่งงานตามข้อความที่ถอดมาได้ และสั่งให้แสดงเป็นวัตถุ 3 มิติ

QR Code

เกริ่นสักนิดก่อนเพื่อให้ทุกท่านเข้าใจว่า QR Code มีลักษณะคล้ายกับ Barcode คือมีการแปลงข้อความให้อยู่ในรูปแบบที่กำหนด โดยมีลักษณะเป็นสี่เหลี่ยมจตุรัส มีจุดบอกทิศอยู่ 3 มุม เพื่อให้รู้ว่าด้านไหนเป็นด้านบน และใช้โปรแกรมในการแสกนเพื่อถอดข้อความซึ่งเป็นได้ทั้ง ตัวอักษร ตัวเลข อักขระต่างๆ ลิงค์ ฯ

เมื่อต้องการถอดรหัส QR code เป็นข้อความสามารถทำได้ทั้งการใช้กล้องแสกน หรือ บันทึกรูปภาพและใช้โปรแกรมถอดรหัส

ภาพที่ 1 QR code ของข้อความ “Hello world!! we are Jarutex!!”

การอ่าน QR code ใน Unity3d

ในการอ่าน QR code ใน Unity3d มี library ให้ใช้งานเรียบร้อยแล้วคือ IBarcodeReader ซึ่งมีโค๊ดตัวอย่างดังนี้

IBarcodeReader barcodeReader = new BarcodeReader();

IBarcodeReader barcodeReader = new BarcodeReader();
var result = barcodeReader.Decode(camTexture.GetPixels32(), camTexture.width, camTexture.height);
if( result.Text == "Jarutex" ){
  //Do something
}

การสร้างวัตถุ 3 มิติ แสดงบนหน้าจอ

การสร้างวัตถุ 3 มิติใน Unity3d นั้นทำได้ง่ายมากโดยมีขั้นตอนดังนี้

  1. ทำการนำเข้าวัตถุ 3 มิติ ใน Assets และตั้งชื่อตามที่ต้องการ ดังภาพที่ 2
  2. ทำการสร้าง prefabs ด้วยวัตถุที่นำเข้ามา
  3. ประกาศตัวแปรเพื่อเก็บวัตถุเป็น GameObject
  4. ใช้คำสั่ง Instantiate(วัตถุ, ตำแหน่ง, การหมุน) เพื่อสร้างวัตถุที่ต้องการ
ภาพที่ 2 การนำเข้าวัตถุ

ตัวอย่างคำสั่ง

public GameObject crab, crab1
crab1 = Instantiate(crab, new Vector3(0f, 0f, 0f), Quaternion.Euler(70, 0, 0));
ภาพที่ 3 ตัวอย่างวัตถุ 3 มิติของปู
ภาพที่ 4 ตัวอย่างวัตถุ 3 มิติของปลาตีน

จากคำสั่งข้างต้น ตัวแปร crab นั้นเป็นตัวแปรที่ใช้เป็นวัตถุ 3 มิติ ซึ่งเป็นเพียงการเก็บไว้ในโปรแกรมแต่ยังไม่ได้ถูกสร้าง จากนั้นจึงสั่งสร้างวัตถุโดยอ้างอิงวัตถุจาก crab ไปเก็บไว้ใน crab1 เพื่อใช้งานต่อไป

เมื่อรวมโค๊ดทั้งสองเข้าด้วยกันทำให้สามารถสั่งแสดงวัตถุ 3 มิติได้อย่างง่ายดาย

IBarcodeReader barcodeReader = new BarcodeReader();
var result = barcodeReader.Decode(camTexture.GetPixels32(), camTexture.width, camTexture.height);
if( result.Text == "Jarutex" ){
  public GameObject fish, fish1
  fish1 = Instantiate(fish, new Vector3(0f, 0f, 0f), Quaternion.Euler(70, 0, 0));
}

สรุป

การนำอ่าน QR code ใน Unity3d สามารถทำได้อย่างง่ายดายโดยมี library ที่ใช้งานง่ายให้ใช้ คือ IBarcodeReader ซึ่งทำได้โดย

  1. สร้างตัวแปรอ้างอิงคลาส IBarcodeReader
  2. ใช้ตัวแปรทำการอ่าน QR code ผ่านกล้องและเก็บไว้ให้ตัวแปรผลลัพธ์
  3. อ่านผลลัพธ์ได้ด้วย Attribute ที่ชื่อว่า Text (result.Text)

ส่วนการแสดงวัตถุ 3 มิติก็สามารถทำได้ง่ายเช่นกันโดยการนำเข้าวัตถุเตรียมไว้ และสั่งสร้างวัตถุนั้นบนหน้าจอด้วยคำสั่ง Instantiate ในตำแหน่งและการหมุนที่กำหนด

สุดท้ายนี้ขอให้ทุกท่านสนุกกับการเขียนโปรแกรมครับ

(C) 2022, โดย อ.จารุต บุศราทิจ/อ.ดนัย เจษฎาฐิติกุล
ปรับปรุงเมื่อ 2022-01-15, 2022-02-24