Augmented RealityUnity 3D

ARCore การใช้งาน Object Manipulation บน Unity

การจับเคลื่อนย้าย ขยาย หรือ เรียกใช้รูปแบบโต้ตอบสภาพแวดล้อม ที่เรียก Object Manipulation ผ่าน ARCore และ Unity เบื้องต้น โดยเขียนโปรแกรม C# ในการตรวจจับสถานะในการทำให้ AR มีความสมจริง

จากบทเรียน ARCore ก่อนหน้านี้:

ตัวอย่างนี้เป็น Unity Based ในการเรียกใช้ ARCore มาทำงาน ก็เลยเอา Labs ที่กำลังเป็นงาน PR ตัวหนึ่งที่ทำมาปรับใช้กันหน่อย ดังนั้นขอข้ามการติดตั้ง Environment ของ ARCore บน Unity ก่อน ใครที่ไม่รู้ว่าทำยังไงให้ไปอ่านบทความ: ARCore Face Rig บน Unity 3D ก่อนในบทความนั้นจะมีขั้นตอนการติดตั้ง และตั้งค่า Environment ของ Unity ให้พร้อมทำงานกับ ARCore

ในตัวอย่างนี้ ท่าทาง Animation ต่างๆ ผมจะใช้ Mixamo.com ในการออกแบบท่าทาง ตัวละคร โมเดล Spiderman ขึ้นมาใหม่ก่อน

ตัวอย่างนี้ผมจะใช้ Examples ของ ARCore ตัวหนึ่งคือ Object Manipulation ที่สามารถเคลื่อนย้าย ขยาย หรือวาง Point ใหม่เรียก Model มายัง AR ได้

ให้ไปเปิด Scene ชื่อ: Examples->ObjectManipulation->Scenes เปิด Scenes ขึ้นมาแล้วเอา Spiderman ออกมาใส่ Collider ให้เรียบร้อย

เมื่อสร้างเสร็จแล้วให้ ทำเป็น Prefabs ชื่อ Spiderman แล้วไปวางแทนตำแหน่ง Andy ซะที่ Andy Generator ใน Hierarchy

ทีนี้ ตามสมมติฐานเราต้องทำการ Detect Wall หรือ กำแพง ซึ่ง ARCore นี่มันจะสร้าง Plane ขึ้นมาเป็นแบบ Vertical Plane ซึ่งเราอนุมานว่าเป็นกำแพง Wall เราเลยต้องลองเขียนโปรแกรมเข้าไปที่ Prefab ของ Spiderman เล็กน้อย

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CustomAnimation : MonoBehaviour
{
    Animator animator;
    public bool isRotation = false;
    // Start is called before the first frame update
    void Start()
    {
        animator = this.gameObject.GetComponent<Animator>();
        if (this.gameObject.transform.rotation.eulerAngles.z > 0)
        {
            // Do something
            Debug.Log("Hang");
            isRotation = true;
            animator.SetBool("isHang",true);
        }else{
            isRotation = false;
            animator.SetBool("isHang",false);
        }
        if(isRotation){
            RotationAnim();
        }
    }
    public void RotationAnim(){
        this.gameObject.transform.Rotate(90, 0, 0,Space.Self);
    }
}

ไปเขียน Custom อื่นๆเองนะครับ อันนี้เบื้องต้น ดังนั้นเราต้องไปสร้าง Bool ของ Animator Controller ว่า isHang ไว้เช็คถ้าเราแตะ Plane แนวตั้งหรือกำแพงให้เรียกใช้งาน isHang

ดังนั้น Prefab ของ Spiderman จะเป็นดังนี้

ส่วน Feature พื้นฐานของ ARCore ส่วนของ Object Manipulation ก็จะมี วงกลมไว้ให้เราหมุน หรือ ขยาย GameObject ครับตามนี้:

ทดสอบกันหน่อยดีกว่า ระบบทำงานยังไง

ห้องที่แสงสว่างดีที่สุดของบ้านคือ ห้องน้ำนี่แหละ….

คงเป็น Mime ได้
คงเป็น Mime ได้

จะเห็นว่าไม่ยากเลยในการสร้าง ARCore ในการตรวจจับ Wall หรือกำแพง

ปล. บทความ ARCore เขียนขึ้นนานแล้วแต่เพิ่งเอาขึ้นระบบ 15 วัน ถ้ามีไรเปลี่ยนแปลงแจ้งได้นะครับ

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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