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

1. ภาพรวม

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

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

ใน Codelab นี้ คุณจะได้สร้างเกมง่ายๆ โดยใช้ 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
    • ปลั๊กอิน ARCore XR

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

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

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

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

เปลี่ยนการตั้งค่าบิลด์

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

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

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

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

  1. เปิดแก้ไข > Project Settings... แล้วคลิกส่วน XR Plug-in Management
  2. เปิดใช้ ARCore ในแท็บ Android

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

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

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

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

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

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

ลำดับชั้นของคุณควรมีลักษณะดังนี้

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

ตั้งค่าการแสดงภาพ

Universal Render Pipeline ของ Unity ต้องทำการเปลี่ยนแปลงหนึ่งรายการเพื่อให้เข้ากันได้กับ AR Foundation

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

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

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

  1. ตรวจสอบว่าได้เสียบปลั๊กอุปกรณ์แล้ว และเปิดการแก้ไขข้อบกพร่อง ADB อยู่
  2. คลิกไฟล์ > สร้างและเรียกใช้... ซึ่งจะเป็นการอัปโหลดแอปพลิเคชันไปยังอุปกรณ์ของคุณและเริ่มทำงานเมื่อติดตั้งเรียบร้อยแล้ว
  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. เลือกแท็บชิ้นงาน และค้นหาการขับขี่ Surface Plane

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 เป็นเทคนิคในการคำนวณทางแยกเมื่อเปล่งแสงในทิศทางที่กำหนด คุณจะใช้การทดสอบการชนเพื่อตรวจหาสี่แยกในทิศทางมุมมองของกล้อง

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

  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. คลิกไฟล์ > สร้างและเรียกใช้... เพื่อทดสอบการเปลี่ยนแปลง
  2. เมื่อเล็งอุปกรณ์ไปที่เครื่องบิน คุณควรเห็นจุดยึดกล้องจะเคลื่อนที่ตามการเคลื่อนที่ของกล้อง

สร้างรถยนต์

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

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

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

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

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

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

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

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

  1. สร้าง GameObject ใหม่ที่ว่างเปล่าในลำดับชั้น
  2. เปลี่ยนชื่อเป็น Package Spawner
  3. เลือกออบเจ็กต์ที่สร้างไว้ ในแผงลำดับชั้น ให้คลิกเพิ่มคอมโพเนนต์เพื่อเพิ่มคอมโพเนนต์ PackageSpawner
  4. ตั้งค่าทรัพยากร Dependency ของ PackageSpawner โดยคลิกตัวเลือกสําหรับแต่ละช่องดังนี้
    • Prefab แพ็กเกจ: ในเนื้อหา ให้เลือก 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 ของ Unity และ Universal Rendering Pipeline
  • วิธีใช้ ARPlaneManager เพื่อสมัครใช้บริการเครื่องบินใหม่
  • วิธีใช้ Raycast เพื่อหาจุดตัดด้วยรูปเรขาคณิตเสมือน
  • วิธีใช้ ARLightEstimationData เพื่อปรับแสงให้ฉาก

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

งานโบนัส

หากต้องการต่อยอดเกมที่คุณสร้างที่นี่ ไอเดียต่อไปนี้อาจต่อยอดได้

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