Augmented RealityUnity 3D

Unity การใช้งาน AR Foundation ทำงานร่วมกับ Image Target

บทเรียนการสร้าง AR หรือ Augmented Reality ด้วย AR Foundation กับการเรียกใช้ Image Target สแกนภาพ

บทเรียนการสร้าง AR หรือ Augmented Reality ด้วย AR Foundation กับการเรียกใช้ Image Target สแกนภาพด้วย Unity

ระบบปฏิบัติการ iOS และ Android มีไลบรารีพื้นฐานในการทำ AR เป็นของตัวเองนามว่า ARKit และ ARCore ตามลำดับ ทำให้เกิดการเปลี่ยนครั้งใหญ่สำหรับคนทำ AR เช่นผมที่ประกอบกับ Unity ออก Library AR foundation มาให้ใช้เป็นทางเลือกที่น่าสนใจ ตั้งแต่มีการเขียนบทความ

การสร้าง Augmented Reality ร่วมกับ Unity 5 และ Vuforia แบบง่าย

เกือบจะ 4-5 ปีที่ผ่านมา เห็นอาจารย์ ครู หรือ Project สื่อการสอน AR ผ่าน Vuforia เยอะมากจนผมเองก็หยิบมาทำงาน Production งานหนึ่ง ชั่งใจกับ ARCore และ ARKit จนได้รู้ว่าสุดท้ายต้องจ่าย License ค่อนข้างแพงต่อปี ซึ่งเมื่อถึงครานึงเราต้องหาวิธีลด Cost รายปี AR Foundation เลยเป็นทางเลือกของผมทันทีเมื่อ Unity เปิดตัวแล้วผลที่ได้คือ พอใจ จนกว่าจะมีการเปลี่ยนเวอร์ชันในอนาคตก็ค่อยหาทางต่อเอา

บทเรียนก่อนหน้านี่: Unity การใช้งาน AR Foundation สร้าง Augmented Reality

ให้ไปศึกษาการติดตั้งกันก่อนนะครับ ก็รวมๆให้ตามนี้:

ไปที่ windows->Package Manager เปิดใช้งาน AR Foundation และ ArCore XR และ ARKit XR ก็แล้วแต่ว่าใช้แพลตฟอร์มไหนที่เราจะทำครับ (เปิดทั้งคู่ได้)

ในตัวอย่างเลือก ARCore XR Plugin

ทำการลบ MainCamera เดิมออก แล้ว Switch Platform เป็น Android ให้เรียบร้อย

คลิกขวาเลือก XR->AR Session Origin ในตัว AR Session Origin จะมี AR Camera เป็น Child ซึ่งคือตัวกล้องหลักของเราในการเล่นแอปพลิเคชัน AR นั่นเอง

ต่อมาให้เลือก XR -> AR Session ซึ่งนั้นจะมีตำแหน่งของการทำงานร่วมกับ ARCore, ARKit

คลิกที่ AR Session Origin บน Hierarchy แล้ว ใส่ Component ชื่อ AR Tracked Image Manager เข้าไป

เมื่อเสร็จแล้วให้ไป Project Assets คลิกขวาสร้าง XR -> Reference Image Library ขึ้นมา

Reference Image Library มีหน้าที่เหมือน Vuforia Image Target ที่เราสร้างขึ้น ต่างกันตรงนี้  Reference Image Library เก็บภาพ Marker หรือ Target Image ไว้ใน แอปพลิเคชันของเราเลย ทำให้ง่ายเวลาที่เราต้องสร้าง AR Image Target หรือ Ar Marker Based ง่ายๆ เร็วๆ ไม่ต้องโหลดผ่านเว็บไซต์

เมื่อสร้าง Reference Image Library เสร็จแล้วให้ไปหาภาพของเรามาใช้กับงานนี้ครับ ผมใช้ภาพตัวอย่างคือ 2 ภาพนี้:

ใครอยากดูผมสตรีมเกม VR หรือสอนออนไลน์ก็ไปที่ https://www.youtube.com/c/daydev

ทีนี้เมื่อคลิกที่ Reference Image Library มันจะมีปุ่มให้เรา Add Image ครับให้ เพิ่มรูปภาพที่เอาเข้ามาไปทำเป็น Marker เลยผมเพิ่มไป 2 รูป

อย่าลืมว่าภาพที่นำมาต้องเปลี่ยน Type เป็น 2D Sprite ก่อนลากไปปล่อยใน Reference Image Library นะครับ

เอาล่ะ Reference Image Library พร้อมแล้วต่อไปเราก็ไปที่ มองที่ Inspector ลาก Reference Image Library ไปวางที่ Serailized Library ของ AR Tracked Image Manager ได้เลย

ทำการสร้าง C# ขึ้นมาที่ AR Session Origin ชื่อ Class ว่า ImageTracking เขียน Code ดังนี้:

ประกาศตัวแปร ARTrackedImageManager

private ARTrackedImageManager arImg;
void Awake()
    {
        arImg = FindObjectOfType<ARTrackedImageManager>();
    }

เพิ่ม Awake() ให้ตัวแปร arImg ที่เราสร้างมาเรียก Object ที่เป็น Type ของ ARTrackedImageManager

หลังจากนั้นสร้างฟังก์ชัน OnEnable() และ OnDisable() เป็น Public Function ดังนี้

public void OnEnable(){
        arImg.trackedImagesChanged += OnImageChanged;
    }

    public void OnDisable(){
        arImg.trackedImagesChanged -= OnImageChanged;
    }

เอาไว้เมื่อเราต้องเปลี่ยนรูปภาพ Image Target ทั้งหมดที่อยู่ใน Reference Image Library ของเราเวลาที่จับภาพติดและหยุดโฟกัสไปที่กล้อง

เพิ่มโฟกัส ของกล้อง OnImageChanged() เวลาที่มีการ Track เจอ Image Target เรา

public void OnImageChanged(ARTrackedImagesChangedEventArgs args){
        foreach (var objects in args.added){
            Debug.Log("Tracked: "+objects.name);
        }
    }

ดังนั้น C# ของไฟล์ ImageTracking จะเป็นดังนี้:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;

public class ImageTracking : MonoBehaviour
{
    private ARTrackedImageManager arImg;
    // Start is called before the first frame update
    void Awake()
    {
        arImg = FindObjectOfType<ARTrackedImageManager>();
    }

    public void OnEnable(){
        arImg.trackedImagesChanged += OnImageChanged;
    }

    public void OnDisable(){
        arImg.trackedImagesChanged -= OnImageChanged;
    }

    public void OnImageChanged(ARTrackedImagesChangedEventArgs args){
        foreach (var objects in args.added){
            Debug.Log("Tracked: "+objects.name);
        }
    }
}

มาดูการใช้งาน ให้สร้าง Cube ขึ้นมา แล้วเตรียม Clone มันเป็น Prefab (ต้องเป็น Prefab นะครับให้ระวังด้วยตรงนี้)

ทำ Cube เป็น Prefab ให้เรียบร้อย ลากมาจาก Hierarchy มาปล่อยที่ Project Assets เลย

แล้วลาก Prefab ของเจ้า Cube นี่แหละไปปล่อยที่ Tracked Image Referal เพิ่ม Max Number of Moving Target เป็นจำนวนเท่ากับภาพของเราครับ

ไปที่ Build Settings ตั้ง Android Minimum SDK เป็น 25 ไปเลย

ทำการเสียบสาย USB เปิด USB Debugging แล้ว Build and Run ครับ

ทีนี้ก็มาทดสอบเปิดไฟล์ภาพของเราแล้ว สแกน มือถือเราไปที่ภาพ ทั้ง 2 ภาพเลยครับ แล้วดูว่า Cube ปรากฏไหม (ผมใช้ Vysor จับหน้าจอ)

ทดสอบอีกทีนึง

ถือว่าเป็นอีกเครื่องมือที่น่าจะช่วยเหลือคนทำ AR โดยทำผ่าน Unity ไปเลยกับ AR Foundation

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน