สร้างเกม AR โดยใช้ AR Foundation ของ Unity

สร้างเกม AR โดยใช้ AR Foundation ของ Unity

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มิ.ย. 25, 2021
account_circleเขียนโดย Dereck Bridie

1 ภาพรวม

ARCore คือเฟรมเวิร์กของ Google สำหรับการสร้างประสบการณ์ Augmented Reality (AR) ในสมาร์ทโฟน คุณใช้ AR Foundation ของ Unity เพื่อสร้างแอปพลิเคชัน AR แบบข้ามแพลตฟอร์มได้

สิ่งที่คุณจะสร้าง

ในโค้ดแล็บนี้ คุณจะได้สร้างเกมง่ายๆ โดยใช้ AR Foundation เป้าหมายของเกมคือการรวบรวมพัสดุโดยใช้รถที่คุณควบคุมโดยใช้อุปกรณ์พกพา

แต่จะไม่เกิดขึ้นในโลกเสมือนจริงทั้งหมด คุณจะต้องผสมผสานอะตอมที่เป็นวัตถุและบิตดิจิทัลเพื่อสร้างประสบการณ์การใช้งานแบบใหม่ให้กับผู้เล่นด้วยการสร้างเกมที่เข้าใจสภาพแวดล้อมรอบตัวผู้เล่น

เมื่อจบ Codelab นี้ เกมของคุณจะทำสิ่งต่อไปนี้ได้

  • ตรวจจับเครื่องบินในโลกจริงและวาดสนามแข่งเหนือเครื่องบิน
  • ส่งรังสีจากมุมมองของกล้องและตรวจจับจุดตัดที่มีเครื่องบิน
  • ตอบสนองต่อสภาพแสงในชีวิตจริงเพื่อให้เกมมีความสมจริงยิ่งขึ้น

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าโปรเจ็กต์ที่ใช้ AR Foundation ของ Unity
  • วิธีใช้ ARPlaneManager เพื่อสมัครใช้บริการแพ็กเกจใหม่
  • วิธีใช้ Raycast เพื่อค้นหาจุดตัดด้วยเรขาคณิตเสมือน
  • วิธีใช้ ARLightEstimationData เพื่อจัดแสงฉาก

สิ่งที่คุณต้องมี

2 ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์

ในขั้นตอนนี้ คุณจะต้องเตรียมสภาพแวดล้อมให้พร้อมสําหรับการพัฒนาด้วย AR Foundation ของ Unity

ตรวจสอบว่าอุปกรณ์ของคุณใช้งาน AR ได้

ประสบการณ์ AR ในอุปกรณ์ Android ขับเคลื่อนโดย ARCore ซึ่งพร้อมใช้งานในอุปกรณ์ที่รองรับ ARCore ตรวจสอบว่าอุปกรณ์การพัฒนาเข้ากันได้กับ AR หรือจะใช้อินสแตนซ์ Android Emulator ที่เข้ากันได้กับ AR ที่กําหนดค่าอย่างถูกต้องก็ได้

ตั้งค่าการแก้ไขข้อบกพร่อง USB ในอุปกรณ์

คุณจะต้องเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์เพื่อเรียกใช้แอปแก้ไขข้อบกพร่อง หากยังไม่ได้ดำเนินการ ให้ดูเอกสารประกอบของ Android เกี่ยวกับเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปและการแก้ไขข้อบกพร่องผ่าน USB

ติดตั้ง Unity (2020.3 LTS)

ติดตั้ง Unity 2020 LTS ในเวิร์กสเตชัน ใน Codelab นี้ ระบบจะแสดงภาพหน้าจอ UI ของ Unity ในเวอร์ชัน 2020.3 (LTS) Unity เวอร์ชันอื่นๆ อาจใช้งานได้ แต่อาจต้องดำเนินการเพิ่มเติม โดยอาจแตกต่างจากภาพหน้าจอที่แสดงที่นี่

สร้างโปรเจ็กต์ใหม่

สร้างโปรเจ็กต์ใหม่โดยใช้เทมเพลต Universal Render Pipeline ตั้งชื่อที่สื่อความหมายและตำแหน่งที่เหมาะสม แล้วกดสร้าง

ติดตั้งเฟรมเวิร์กที่จําเป็น

ดู AR Foundation ของ Unity ได้ใน Unity Package Manager

  1. เปิดโดยการคลิกหน้าต่าง > ตัวจัดการแพ็กเกจ

  1. ในหน้าต่างนี้ ให้ติดตั้งแพ็กเกจที่คุณจะใช้ใน Codelab นี้ ดูเฟรมเวิร์กเหล่านี้เวอร์ชันล่าสุดได้โดยขยายรายการโดยใช้ไอคอน ติดตั้งเฟรมเวิร์กแต่ละรายการต่อไปนี้ในเวอร์ชันล่าสุด
    • AR Foundation
    • ปลั๊กอิน ARCore XR

เมื่อเสร็จแล้ว ตัวจัดการแพ็กเกจควรมีลักษณะดังนี้

ติดตั้งแพ็กเริ่มต้น

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

  1. ติดตั้งแพ็กเกจเริ่มต้นโดยเปิดเนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง... และกำลังเปิด starter-package.unitypackage
  2. ในหน้าต่างป๊อปอัป ให้ตรวจสอบว่าเลือกทุกอย่างแล้ว
  3. คลิกนำเข้า

เปลี่ยนการตั้งค่าการสร้าง

เนื่องจากแอปพลิเคชันจะทำงานบน Android ให้เปลี่ยนแพลตฟอร์มบิลด์เป็น Android ดังนี้

  1. เปิดไฟล์ > การตั้งค่าบิลด์
  2. ในแผงแพลตฟอร์ม ให้เลือก Android
  3. คุณอาจเปิดใช้บิลด์สำหรับนักพัฒนาซอฟต์แวร์และการแก้ไขข้อบกพร่องสคริปต์เพื่อเก็บข้อมูลการแก้ไขข้อบกพร่องไว้ขณะที่แอปทำงาน
  4. คลิกเปลี่ยนแพลตฟอร์ม

เปลี่ยนการตั้งค่าโปรเจ็กต์

ต้องกำหนดค่า AR Foundation เพื่อเริ่มใช้งานระบบ XR เมื่อเริ่มต้นระบบ

  1. เปิดแก้ไข > การตั้งค่าโปรเจ็กต์... แล้วคลิกส่วนการจัดการปลั๊กอิน XR
  2. ในแท็บ Android ให้เปิดใช้ ARCore

  1. คลิกส่วนโปรแกรมเล่นในแผงด้านซ้าย
  2. ในแท็บ Android ในส่วนการตั้งค่าอื่นๆ ให้นำ Vulkan ออกจาก Graphics API

  1. แอปที่ต้องใช้งาน AR โดยใช้ ARCore ต้องมี API ระดับ 24 เป็นอย่างน้อย เลื่อนลงและหาระดับ API ขั้นต่ำ ตั้งค่าระดับ API ขั้นต่ำเป็น 24

เพิ่มองค์ประกอบของฉากที่จำเป็น

เทมเพลต Universal Render Pipeline มาพร้อมกับออบเจ็กต์เกมบางรายการที่คุณจะไม่ใช้ในบทแนะนำนี้

  1. ลบออบเจ็กต์เกมทั้งหมดใน SampleScene

  1. เพิ่มออบเจ็กต์ AR Foundation คลิกขวาในแผงลำดับชั้น ใช้เมนูนี้เพื่อเพิ่มรายการต่อไปนี้
  • XR เซสชัน AR: ออบเจ็กต์นี้ควบคุมวงจรของประสบการณ์ AR
  • XR ต้นทางเซสชัน AR: ออบเจ็กต์นี้เปลี่ยนพิกัด AR เป็นพิกัดโลกของ Unity
  • สว่าง > แสงทิศทาง: ตัวเลือกนี้ให้แหล่งกำเนิดแสงเพื่อให้วัตถุในเกมส่องสว่าง

ลําดับชั้นควรมีลักษณะดังนี้

  1. ขยายต้นทางเซสชัน AR ที่คุณสร้างในลำดับชั้น แล้วเลือกออบเจ็กต์กล้อง AR ในเครื่องมือตรวจสอบ ให้เปลี่ยนแท็กเป็น MainCamera

ตั้งค่าการแสดงผล

Universal Render Pipeline ของ Unity ต้องทำการเปลี่ยนแปลง 1 รายการจึงจะใช้งานร่วมกับ AR Foundation ได้

  1. ในแผงโปรเจ็กต์ ให้ไปที่ชิ้นงาน > การตั้งค่าเพื่อค้นหาเนื้อหา ForwardRenderer

  1. เลือก ForwardRenderer
  2. ในแผงเครื่องมือตรวจสอบ ให้ใช้เพิ่มฟีเจอร์ตัวแสดงผลเพื่อเพิ่มฟีเจอร์โปรแกรมแสดงผลพื้นหลัง AR คอมโพเนนต์นี้จะแสดงฟีดกล้องในฉาก

ยืนยันการตั้งค่า

  1. ตรวจสอบว่าได้เสียบปลั๊กอุปกรณ์และเปิดการแก้ไขข้อบกพร่อง ADB แล้ว
  2. คลิก File > Build And Run... ซึ่งจะอัปโหลดแอปพลิเคชันไปยังอุปกรณ์และเริ่มแอปพลิเคชันเมื่อติดตั้งแล้ว
  3. คุณควรจะเห็นฟีดกล้องบนหน้าจอของอุปกรณ์

ในขั้นตอนถัดไป คุณจะเริ่มเพิ่มฟังก์ชันการทำงานลงในแอป

3 ตรวจจับเครื่องบินในโลกจริง

เมื่อตั้งค่าฉากพื้นฐานแล้ว คุณก็เริ่มพัฒนาเกมได้เลย ในขั้นตอนนี้ คุณจะตรวจพบระนาบและวาดเครื่องบินไปยังฉาก

เพิ่มคอมโพเนนต์ ARPlaneManager

ARPlaneManager จะตรวจหา ARPlane รวมถึงสร้าง อัปเดต และนำออบเจ็กต์เกมออกเมื่ออุปกรณ์เข้าใจสภาพแวดล้อมมีการเปลี่ยนแปลง

  1. ใช้แผงลำดับชั้นเพื่อสร้าง GameObject ที่ว่างเปล่า
  2. เปลี่ยนชื่อเป็น Driving Surface Manager คอมโพเนนต์นี้จะแสดงเครื่องบินจนกว่าผู้เล่นจะเลือกเครื่องบินลำใดลำหนึ่ง
  3. เลือกออบเจ็กต์เกมใหม่ ภายในแผง Inspector ให้คลิก Add Component เพื่อเพิ่ม AR Plane Manager

  1. กำหนดค่า ARPlaneManager โดยการตั้งค่าช่อง Plane Prefab ดังนี้
    1. คลิกปุ่มถัดจาก None เพื่อเปิดหน้าต่าง Select GameObject ขึ้นมา
    2. เลือกแท็บชิ้นงาน แล้วค้นหาระนาบพื้นผิวการขับขี่

Prefab จากแพ็กเกจเริ่มต้นนี้มีพื้นผิวแบบหยาบๆ ที่จะใช้เป็นการตกแต่งเครื่องบิน

  1. เปลี่ยน Detection Mode เป็น Horizontal การดำเนินการนี้จะกำหนดค่า ARPlaneManager ให้แสดงระนาบแนวนอนเท่านั้นที่เหมาะสำหรับการขับขี่

เพิ่มคอมโพเนนต์ ARRaycastManager

ARRaycastManager แสดงฟังก์ชันการทำงานของ Raycast ในขั้นตอนถัดไป เราจะใช้ออบเจ็กต์นี้เพื่อมอบการควบคุมสำหรับผู้ใช้

  1. ตรวจสอบว่าได้เลือกออบเจ็กต์ชื่อ Driving Surface Manager ในแผงลําดับชั้น
  2. ในเครื่องมือตรวจสอบ ให้คลิกเพิ่มคอมโพเนนต์เพื่อเพิ่มคอมโพเนนต์ ARRaycastManager ไปยังออบเจ็กต์เกม

ไม่ต้องมีการกำหนดค่าเพิ่มเติมสำหรับคอมโพเนนต์นี้

เพิ่มคอมโพเนนต์ DrivingSurfaceManager

DrivingSurfaceManager เป็นสคริปต์ตัวช่วยจากแพ็กเกจเริ่มต้นที่ช่วยให้เลือก ARPlane ได้ เมื่อเลือก ARPlane แล้ว ระบบจะซ่อนระนาบอื่นๆ ทั้งหมดและปิดใช้ระนาบใหม่

  1. ตรวจสอบว่าได้เลือกออบเจ็กต์ชื่อ Driving Surface Manager ในแผงลําดับชั้น
  2. ในตัวตรวจสอบ ให้คลิกเพิ่มคอมโพเนนต์เพื่อเพิ่มคอมโพเนนต์ DrivingSurfaceManager ลงในออบเจ็กต์เกม

ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมสำหรับคอมโพเนนต์นี้

เรียกใช้แอป

  1. คลิกไฟล์ > สร้างและเรียกใช้... เพื่อทดสอบการเปลี่ยนแปลง
  2. เล็งอุปกรณ์ไปที่พื้นผิวแนวนอนจริง แล้วเคลื่อนอุปกรณ์ไปรอบๆ เพื่อช่วยให้ ARCore เข้าใจโลกได้ดีขึ้น

  1. เมื่อ ARCore ตรวจพบเครื่องบิน คุณควรเห็นพื้นผิวในโลกจริงมีพื้นผิวของดิน ARPlaneManager จะสร้างอินสแตนซ์ Plane Prefab ที่ระบุสำหรับระนาบที่ตรวจพบแต่ละระนาบ Prefab ของ Driving Surface Plane มีคอมโพเนนต์ ARPlaneMeshVisualizer ซึ่งจะสร้าง Mesh สำหรับ ARPlane ที่ระบุ

ในขั้นตอนถัดไป คุณจะต้องใช้ระนาบที่ตรวจพบเป็นสนามเล่น

4 ทำการทดสอบการชนกับเครื่องบินที่ตรวจพบ

ในขั้นตอนก่อนหน้า คุณได้ตั้งโปรแกรมแอปพลิเคชันที่ตรวจจับเครื่องบินได้ เครื่องบินเหล่านี้จะสะท้อนอยู่ในฉากของเกม ตอนนี้คุณจะต้องเพิ่มการโต้ตอบกับเครื่องบินเหล่านี้ด้วยการสร้างเป้าเล็งและรถที่จะขับบนพื้นผิวของเครื่องบินที่ตรวจพบ

สร้างเป้าเล็ง

รูปแบบการควบคุมของแอปนี้คือการที่ผู้เล่นชี้โทรศัพท์ไปที่พื้นผิว คุณจะใช้เป้าเล็งเพื่อให้ความคิดเห็นที่ชัดเจนเกี่ยวกับตำแหน่งที่ระบุ

หากต้องการ "ติด" เล็งนี้กับระนาบ AR ให้ใช้การทดสอบการตี การทดสอบ Hit เป็นเทคนิคที่คำนวณจุดตัดเมื่อแคสต์เรย์ในทิศทางหนึ่งๆ คุณจะใช้ Hit Test เพื่อตรวจหาจุดตัดกันในทิศทางของมุมมองกล้อง

เพิ่มรูรับแสง

  1. ในแผงโปรเจ็กต์ใกล้กับด้านล่างของหน้าจอ ให้ไปที่เนื้อหา > แพ็กเกจเริ่มต้น
  2. วาง Reticle Prefab ลงในฉากโดยลากลงในบานหน้าต่างลำดับชั้นของโปรเจ็กต์
  3. เลือกเป้าเล็งในลําดับชั้น
  4. ในเครื่องมือตรวจสอบ ให้คลิกเพิ่มคอมโพเนนต์ เพิ่มสคริปต์ ReticleBehaviour จากแพ็กเกจเริ่มต้น สคริปต์นี้มีเทมเพลตต้นแบบสำหรับควบคุม Reticle
  5. สคริปต์ ReticleBehaviour จะขึ้นอยู่กับ Driving Surface Manager ที่คุณสร้างไว้ก่อนหน้านี้ ดังนั้นโปรดเพิ่มการอ้างอิงโดยคลิกตัวเลือก Driving Surface Manager เลือกแท็บบรรยากาศ แล้วเลือก Driving Surface Manager

แก้ไข ReticleBehaviour

สคริปต์ ReticleBehavior จะวางตำแหน่งเป้าเล็งบนระนาบที่อยู่ตรงกลางของวิวพอร์ตของอุปกรณ์

  1. เปิดสคริปต์ ReticleBehaviour.cs โดยดับเบิลคลิกช่อง Script
  2. กำหนดกึ่งกลางของหน้าจอโดยใช้กล้องViewToScreenPoint แก้ไขเมธอด Update() เพื่อเพิ่มข้อมูลต่อไปนี้
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
  1. ใช้จุดนี้เพื่อถ่ายทอดภาพเรย์แคสต์ เพิ่มข้อมูลต่อไปนี้
var hits = new List<ARRaycastHit>();
DrivingSurfaceManager.RaycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinBounds);

ตัวแปร hits จะมี ARRaycastHit ซึ่งอธิบายจุดบนสิ่งที่ติดตามได้ซึ่งตัดกับ ray

  1. ระบุจุดร่วมที่น่าสนใจโดยค้นหาในรายการ hits ให้ความสำคัญกับระนาบที่ล็อกซึ่งอยู่ใน DrivingSurfaceManager และหากไม่มี ให้ใช้เครื่องบินตกครั้งแรก เพิ่มข้อมูลต่อไปนี้ที่ส่วนท้ายของ Update()
CurrentPlane = null;
ARRaycastHit? hit = null;
if (hits.Length > 0)
{
    // If you don't have a locked plane already...
    var lockedPlane = DrivingSurfaceManager.LockedPlane;
    hit = lockedPlane == null
        // ... use the first hit in `hits`.
        ? hits[0]
        // Otherwise use the locked plane, if it's there.
        : hits.SingleOrDefault(x => x.trackableId == lockedPlane.trackableId);
}
  1. หาก hit มีผลการค้นหา ให้ย้ายการเปลี่ยนรูปแบบของ GameObject นี้ไปยังตําแหน่ง Hit
if (hit.HasValue)
{
    CurrentPlane = DrivingSurfaceManager.PlaneManager.GetPlane(hit.Value.trackableId);
    // Move this reticle to the location of the hit.
    transform.position = hit.Value.pose.position;
}
Child.SetActive(CurrentPlane != null);

ทดสอบตาข่าย

  1. คลิก File > Build And Run... เพื่อทดสอบการเปลี่ยนแปลง
  2. เมื่อคุณเล็งอุปกรณ์ไปที่เครื่องบิน คุณควรเห็นเส้นเล็งติดตามการเคลื่อนไหวของกล้อง

สร้างรถยนต์

ผู้เล่นจะควบคุมรถของเล่นที่จะขับไปยังตำแหน่งของเป้าปืน โมเดลและลักษณะการทํางานของรถรุ่นนี้มีอยู่ในแพ็กเกจเริ่มต้น

เพิ่ม CarManager ลงในฉากของคุณ

  1. ในลําดับชั้น ให้สร้าง GameObject ใหม่ว่างเปล่า
  2. เปลี่ยนชื่อเป็น Car Spawner
  3. เลือกวัตถุที่สร้างไว้ ในแผงลำดับชั้น ให้คลิกเพิ่มคอมโพเนนต์เพื่อเพิ่มคอมโพเนนต์ CarManager
  4. ตั้งค่าการพึ่งพาของ CarManager โดยคลิกตัวเลือกสำหรับแต่ละช่อง
    • Prefab รถยนต์: ในชิ้นงาน ให้เลือกPrefab รถยนต์
    • เส้นด้าย: ในฉาก ให้เลือก Reticle Prefab
    • การขับเคลื่อน Surface Manager: ในบรรยากาศ ให้เลือกการขับขี่ตัวจัดการแพลตฟอร์ม

ลักษณะการทำงานของ CarManager นี้จะสร้างรถของเล่นบนเครื่องบินที่มีเป้าเล็งอยู่ หากต้องการ โปรดดูสคริปต์ CarBehaviour เพื่อดูวิธีตั้งโปรแกรมรถ

บริการทดลองขับ

  1. คลิกไฟล์ > บิลด์และเรียกใช้เพื่อทดสอบการเปลี่ยนแปลง
  2. เมื่อแตะเครื่องบิน คุณจะเห็นรถขนาดเล็กปรากฏขึ้นที่ตำแหน่งนั้น รถคันนี้จะตามเป้า

เพิ่มองค์ประกอบเกม

เมื่อผู้เล่นควบคุมเอนทิตีในฉากได้แล้ว ลองกำหนดจุดหมายที่จะขับให้ผู้เล่น

  1. สร้าง GameObject ใหม่ที่ว่างเปล่าในลำดับชั้น
  2. เปลี่ยนชื่อเป็น Package Spawner
  3. เลือกวัตถุที่สร้างไว้ ในแผงลําดับชั้น ให้คลิกเพิ่มคอมโพเนนต์เพื่อเพิ่มคอมโพเนนต์ PackageSpawner ลงไป
  4. ตั้งค่าทรัพยากร PackageSpawner โดยคลิกตัวเลือกสำหรับแต่ละช่อง
    • Package Prefab: ในชิ้นงาน ให้เลือก Package Prefab
    • การขับเคลื่อน Surface Manager ในบรรยากาศ ให้เลือกการขับขี่ตัวจัดการแพลตฟอร์ม

ลักษณะการทำงาน PackageSpawner นี้ทำให้เกิดแพ็กเกจใหม่ในตำแหน่งแบบสุ่มบน ARPlane ที่ล็อกไว้ หากยังไม่มีแพ็กเกจ

ทดสอบเกม

  1. คลิกไฟล์ > บิลด์และเรียกใช้เพื่อทดสอบการเปลี่ยนแปลง 2. หลังจากสร้างรถ พัสดุควรปรากฏขึ้น
  2. ขับรถไปที่พัสดุ
  3. รายการใหม่จะปรากฏขึ้นที่ตำแหน่งแบบสุ่ม

5 ตั้งค่าการประมาณค่าแสง

เมื่อสร้างเกมพื้นฐานเสร็จแล้ว ให้เพิ่มความสมจริงให้กับฉาก AR ในขั้นตอนนี้ คุณจะใช้ Lighting Estimation API ของ ARCore ในการตรวจจับแสงที่ปรากฏในโลกจริงโดยอิงจากเฟรมกล้องที่เข้ามาใหม่ ระบบจะใช้ข้อมูลนี้เพื่อปรับแสงของฉากให้ตรงกับแสงในชีวิตจริง

เปิดใช้การประมาณแสง

  1. ในลําดับชั้น ให้ขยายต้นทางเซสชัน AR แล้วเลือกออบเจ็กต์กล้อง AR
  2. ใน Inspector ให้ขยายสคริปต์ AR Camera Manager
  3. เปลี่ยนช่องการประมาณแสงเป็นทุกอย่าง

แก้ไขแสงทิศทาง

  1. ในลําดับชั้น ให้เลือกออบเจ็กต์แสงทิศทาง
  2. เพิ่มคอมโพเนนต์ LightEstimation เข้าไป คอมโพเนนต์นี้จากแพ็กเกจเริ่มต้นมีข้อมูลเริ่มต้นสําหรับการติดตามการเปลี่ยนแปลงของแสง
  3. เพิ่มข้อมูลต่อไปนี้ในฟังก์ชัน FrameReceived()
ARLightEstimationData lightEstimation = args.lightEstimation;

if (lightEstimation.averageBrightness.HasValue)
    Light.intensity = lightEstimation.averageBrightness.Value;

if (lightEstimation.averageColorTemperature.HasValue)
    Light.colorTemperature = lightEstimation.averageColorTemperature.Value;

if (lightEstimation.colorCorrection.HasValue)
    Light.color = lightEstimation.colorCorrection.Value;

if (lightEstimation.mainLightDirection.HasValue)
    Light.transform.rotation = Quaternion.LookRotation(lightEstimation.mainLightDirection.Value);

if (lightEstimation.mainLightColor.HasValue)
    Light.color = lightEstimation.mainLightColor.Value;

if (lightEstimation.mainLightIntensityLumens.HasValue)
    Light.intensity = lightEstimation.averageMainLightBrightness.Value;

if (lightEstimation.ambientSphericalHarmonics.HasValue)
{
    RenderSettings.ambientMode = AmbientMode.Skybox;
    RenderSettings.ambientProbe = lightEstimation.ambientSphericalHarmonics.Value;
}

ทดสอบการเปลี่ยนแปลง

  1. คลิกไฟล์ > บิลด์และเรียกใช้เพื่อทดสอบการเปลี่ยนแปลง
  2. เมื่อดูวัตถุในฉาก คุณอาจสังเกตเห็นว่าวัตถุมีสีขึ้นอยู่กับแสงของสภาพแวดล้อม
  3. หากเป็นไปได้ ให้ลองปรับแสง เช่น ลองปิดไฟในห้องที่คุณอยู่ คุณควรเห็นว่าแสงในวัตถุปรับตามการเปลี่ยนแปลงของแสงในโลกจริง

6 สรุป

ยินดีด้วย คุณมาถึงจุดสิ้นสุดของ Codelab นี้ใน Unity AR Foundation แล้ว

สิ่งที่คุณได้ครอบคลุม

  • วิธีตั้งค่าโปรเจ็กต์พื้นฐานโดยใช้ AR Foundation และ Universal Rendering Pipeline ของ Unity
  • วิธีใช้ ARPlaneManager เพื่อสมัครใช้บริการแพ็กเกจใหม่
  • วิธีใช้ Raycast เพื่อหาจุดตัดด้วยรูปเรขาคณิตเสมือน
  • วิธีใช้ ARLightEstimationData เพื่อปรับแสงให้ฉาก

ขั้นตอนถัดไป

งานพิเศษ

หากต้องการขยายเกมที่คุณสร้างที่นี่ ต่อไปนี้คือไอเดียบางส่วนที่คุณอาจนำไปใช้

  • เพิ่มตัวนับคะแนนลงในเกมโดยการแก้ไข TextMeshPro เมื่อ PackageManager สร้างแพ็กเกจใหม่
  • ดูข้อมูลประสิทธิภาพเมื่อเกมกำลังทำงานโดยเปิดใช้การวางซ้อนประสิทธิภาพ
  • ใช้ Persistent Raycasts เพื่อวางวัตถุใหม่ในฉากก่อน เมื่อตรวจพบเครื่องบินในพื้นที่นั้น วัตถุจะอัปเดตให้สอดคล้องกับเครื่องบินดังกล่าว