ไอเดียจากต่างประเทศ โดยใช้ Package Curved Line ในการทำ Custom Draw Line ร่วมกับ ARCore บน Unity สำหรับไอเดีย AR นำทางหรือ Mime Glitter
บทเรียนที่ควรศึกษา ARCore บน Unity ก่อนมาบทเรียนนี้:
- มาลองใช้งาน ARCore ของ Google บน Android Studio และ Unity 3D กัน
- ARCore Face Rig บน Unity 3D
- ARCore การใช้งาน Object Manipulation บน 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
และก็เปิดดู Child ของ ARCore Device เราจะพบกับ First Person Camera ให้ลากไปวางที่ Camera ของ AR Point Draw
ทดสอบแอปพลิเคชันของเรา Build ลงมือถือซะ
เปิดใช้งานหน่อยสิ
ดูวีดีโอสาธิตกันหน่อย
ขอบคุณไอเดีย: