Augmented RealityUnity 3D

การทำ ARCore บน Unity วาดเส้นทางร่วมกับ Curved Line

ไอเดียจากต่างประเทศ โดยใช้ Package Curved Line ในการทำ Custom Draw Line ร่วมกับ ARCore บน Unity สำหรับไอเดีย AR นำทางหรือ Mime Glitter

บทเรียนที่ควรศึกษา ARCore บน Unity ก่อนมาบทเรียนนี้:

ทำการ New Unity Project ขึ้นมาใหม่เลย หลังจากนั้นให้ไปดาวน์โหลด ARCore มาใช้ซึ่งจริงๆ ก็มีหลายเวอร์ชันอยู่เลือกเวอร์ชันล่าสุดเลย

หลังจากนั้นให้เราไปดาวน์โหลด ARCore for Unity เวอร์ชัน 1.10 หรือ 1.11 ที่เว็บไซต์: https://developers.google.com/ar/develop/unity/quickstart-android

หลังจากนั้นให้ไปที่ Windows -> Package Manager

เปิดใช้งาน Multiplayer HLAPI (มีผลกับฟังก์ชัน Cloud Archor ของ ARCore, ไว้จะเขียน Tutorial บทต่อๆไป) และเปิดใช้อีกตัวคือ XR Legacy Input Helpers

ทำการ Install ทั้งสอง Package ให้เรียบร้อย หลังจากนั้น ไปที่ Player Settings ส่วนของ Others Setting ให้ไปที่ Graphics APIs ให้นำ APIs ที่ไม่จำเป็นออกเหลือแค่ OpenGLEs3 ตัวเดียว ดังภาพข้างล่าง

เสร็จแล้วไปที่ XR Settings ทำการเลือก ARCore Supported ให้เรียบร้อย

เท่านี้ Project ของเราก็พร้อมใช้งานแล้ว ไปที่ Assets->GoogleARCore->Examples->HelloAR

ไปเปิด Scene นั้นขึ้นมาหลังจากนั้นให้

เลือก Example Controller, Plane Generator,  Point Cloud ลบออกจาก Hierarchy

หลังจากนั้นไปหา Unity Package ของ Curved Line สำหรับสร้าง Draw Line แบบ Custom ที่ URL:

https://drive.google.com/open?id=1hENXHD62OGXeq9dmcw5buqEOqb-ERbrx

ทำการ Import เข้าไปใน Project ของเรา Assets->Import Package->Custom Package เราจะมี Folder ว่า CurvedLine ใน Project ของเรา

สร้าง Empty GameObject ขึ้นมาใหม่ชื่อว่า LineDraw ใส่ Component ใหม่ชื่อว่า Curved Line Renderer เข้าไป

ใน Line Renderer ให้ปรับค่า Positions-> Size เป็น 0

สร้าง Material ใหม่ขึ้นมาชื่อว่าอะไรก็ได้ ตกต่างเป็น Emission เก๋ๆ กันเล็กน้อย

ลากไปวางใน Line Renderer

สร้าง Sphere ใหม่ขึ้นมาใน Hierarchy ตั้งค่า Scale เป็น 0.1, 0.1, 0.1

เพิ่ม Script ของ Curved Line Point ใส่ใน Sphere

กลับไปที่ LineDraw สร้าง New C# Class ใหม่เข้ามาชื่อว่า: ARPointDraw.cs

ใส่ Code ตามนี้:

sing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleARCore;
#if UNITY_EDITOR
    using Input = GoogleARCore.InstantPreviewInput;
#endif

public class ARPointDraw : MonoBehaviour
{
    public GameObject gameObject;
	public GameObject camera;
	public List<GameObject> Points = new List<GameObject>();

    void Update()
    {
        if(Input.GetMouseButton(0) || Input.touchCount>0) {
			Debug.Log("Draw");
			Vector3 camPos = camera.transform.position;
 			Vector3 camDirection = camera.transform.forward;
 			Quaternion camRotation = camera.transform.rotation;
 			float spawnDistance = 2;
			Debug.Log("Position: "+camPos.x+" "+camPos.y+" "+camPos.z);
 			Vector3 spawnPos = camPos + (camDirection * spawnDistance);
			GameObject cur = Instantiate(gameObject, spawnPos,  camRotation);
			cur.transform.SetParent(this.transform);
		}
    }
}

ลาก Sphere ไปใส่ใน Prefabs หลังจากนั้นลบ แล้วเอา Prefab ของ Sphere ลากไปที่ Game Object ของ ARPointDraw.cs

สร้าง Prefab ของ Sphere
สร้าง Prefab ของ Sphere

และก็เปิดดู Child ของ ARCore Device เราจะพบกับ First Person Camera ให้ลากไปวางที่ Camera ของ AR Point Draw

ทดสอบแอปพลิเคชันของเรา Build ลงมือถือซะ

เปิดใช้งานหน่อยสิ

ดูวีดีโอสาธิตกันหน่อย

ขอบคุณไอเดีย:

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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