Game DevelopmentUnity 3D

Unity การกำหนดเส้นทางด้วย Navigation and Pathfinding

ตัวอย่างสำหรับ Unity 5.3 ในการใช้งาน Navigation และ Pathfinding กำหนดเส้นทางให้ Game Object เดินไปตามเส้นทางในรูปแบบของ Navigation Agent อย่างง่าย

เป็นตัวอย่างที่ปรากฏใน Document ของ Unity ตัวใหม่อยู่แล้ว ว่า Unity นั้นแถมระบบ Navigation และ Path Finding สร้าง AI Movement เดินไปมาใน ฉากของเราที่ถูกสร้างในรูปแบบของ Mesh อยู่แล้วได้อย่างง่ายๆ

เก่อนอื่นเราต้องมี Model ฉากของเราที่เป็น Mesh Object อยู่แล้วผมได้ทำการสร้างโมเดล 3 มิติในโปรแกรม Blender ไว้ Export ออกเป็น .FBX ไปใช้กับ Unity ได้เลยครับ

unity-navigation-pathfindin

นำไปวางใน Project ของ Unity ได้เลย

unity-navigation-path-2

ต่อมาให้เรา นำตัวละครที่เราต้องใช้เป็น Navigation Agent หรือตัว AI ที่จะให้เดินไปมาตามเส้นทางมาวางไว้ใน Mesh ของ ฉากที่เราสร้างขึ้นผมใช้ Flog จากเกม Crossy Road มาใช้

unity-navigation-path-3

คลิกที่ Object Mesh ของฉากหรือพื้นที่กบจะต้องเดินไปที่เมนู Windows -> Navigation เราจะมีหน้าจอการกำหนด Navigation ขึ้นมา

unity-navigation-path-4

หน้าต่างในการกำหนดการตั้งค่าเป็นดังนี้

unity-navigation-path-5

กดปุ่ม Bake แล้วรอดูผลลัพธ์การคำนวณเส้นทางจากพื้นผิวของโมเดล

unity-navigation-path-6

ระบบจะทำการสร้าง Navigation สีน้ำเงินขึ้นมาตามพื้นผิวที่ใกล้เคียงกับพื้นสำหรับทางเดินให้อัตโนมัติเราสามารถตั้งค่าใหม่ให้เหมาะสมได้ให้ทำการ Bake ใหม่ทุกครั้ง

ต่อมาให้เราสร้าง Flog หรือ GameObject ที่จะให้เคลื่อนที่นั้นเป็น Nav Mesh Agent หรือ Navigation Agent เสียก่อนให้คลิกที่เจ้าตัวละครของเรา เลือก Add Component -> Navigation -> Nav Mesh Agent ใน Inspector ครับ

unity-navigation-path-8

เราจะเห็นแล้วว่าเจ้าตัวละครของเราก็จะกลายเป็น Nav Mesh Agent เรียบร้อยแล้ว ให้เราสร้างไฟล์ C# ขึ้นมาใหม่ชื่อว่า Pathfinding.cs

unity-navigation-path-9

โดย Script ของไฟล์ Pathfinding.cs นั้นจะประกอบไปด้วย

using UnityEngine;
using System.Collections;

public class Pathfinding : MonoBehaviour {
    public Transform goalObject;
       
    void Start () {
          NavMeshAgent navAgent = GetComponent<NavMeshAgent>();
          navAgent.destination = goalObject.position; 
    }
}

เป็นการสร้าง Target เป็น Transform ขึ้นมาชื่อว่า goalObject

public Transform goalObject;

แล้วกำหนดให้ตัว Nav Mesh Agent เดินไปยังตำแหน่งของ goalObject ผ่านเส้นทางที่กำหนดใน Navigation ที่

NavMeshAgent navAgent = GetComponent<NavMeshAgent>();
navAgent.destination = goalObject.position;

ให้เราสร้าง Object ปลายทางโดยสร้าง Cube ขึ้นมาหนึ่งชิ้น

unity-navigation-path-7

นำเจ้าCube ที่สร้างขึ้นมาใหม่นี้ไปสร้างเป็น goalObject ของคลาส Pathfinding.cs ที่เจ้าตัวละครของเรา

unity-navigation-path-10

ทำการทดสอบเกมของเราโดยการ Run ตัวเกม

unity-navigation-path-11

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

Unity-Navigation-partfindin

 

ส่วนนี่ไฟล์วีดีโอทดสอบผลลัพธ์

ลองเอาไปทำดูนะครับ หรือจะศึกษาใน Doc ของ Unity เพิ่มเติมก็ได้ครับ

Asst. Prof. Banyapon Poolsawas

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

Related Articles

Back to top button

Adblock Detected

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