บทที่ 5: การสร้าง AI ตัวละครในเกม

AI หรือปัญญาประดิษฐ์ในเกมเป็นระบบที่ทำให้ตัวละครที่ไม่ได้ควบคุมโดยผู้เล่น (Non-Player Characters: NPCs) มีพฤติกรรมที่ดูเหมือนมีชีวิตจริง ตัวละครเหล่านี้สามารถทำงานได้หลากหลาย เช่น การไล่ตามผู้เล่น การเดินลาดตระเวนในพื้นที่ หรือการโต้ตอบกับสิ่งแวดล้อมในเกม การสร้าง AI ตัวละครจะช่วยเพิ่มความสนุกและท้าทายให้กับเกมได้มากขึ้น

ในบทนี้เราจะเรียนรู้วิธีการสร้าง AI เบื้องต้น เช่น การเดินลาดตระเวน การไล่ตามผู้เล่น และการทำงานกับ NavMesh เพื่อให้ตัวละครสามารถเคลื่อนไหวได้อย่างอัตโนมัติในเกม 3D


การใช้ NavMesh สำหรับการเคลื่อนไหวของ AI

NavMesh (Navigation Mesh) เป็นระบบที่ใช้เพื่อทำให้ AI ในเกมสามารถเคลื่อนไหวไปยังตำแหน่งต่าง ๆ ในฉากได้ โดยไม่ชนกับสิ่งกีดขวาง เช่น กำแพงหรือวัตถุอื่น ๆ การใช้ NavMesh จะช่วยให้การเคลื่อนไหวของตัวละครดูสมจริงและเป็นธรรมชาติมากขึ้น

ขั้นตอนการตั้งค่า NavMesh

  1. สร้างพื้นดินหรือพื้นที่ในฉากที่ตัวละคร AI จะเคลื่อนไหว
  2. เลือกวัตถุที่เป็นพื้นดินใน Hierarchy แล้วไปที่ Inspector
  3. คลิกที่ Navigation และเลือก Bake เพื่อให้ Unity สร้าง NavMesh บนพื้นผิวที่เลือกไว้
  4. เพิ่ม NavMesh Agent ให้กับตัวละคร AI โดยเลือกตัวละครใน Hierarchy ไปที่ Inspector > Add Component และพิมพ์ค้นหา NavMesh Agent

เมื่อทำตามขั้นตอนข้างต้นแล้ว ตัวละคร AI จะสามารถใช้ NavMesh ในการเคลื่อนที่ไปตามเส้นทางที่กำหนดไว้ในฉากได้


การเขียนโค้ดเพื่อควบคุมการเคลื่อนไหวของ AI ด้วย NavMesh

เมื่อเราเพิ่ม NavMesh Agent ให้กับตัวละคร AI แล้ว ขั้นตอนต่อไปคือการเขียนโค้ด C# เพื่อควบคุมการเคลื่อนไหวของ AI ให้ไปยังตำแหน่งเป้าหมายที่กำหนดไว้ เช่น การให้ตัวละครเดินไปตามจุดต่าง ๆ ในฉาก

ตัวอย่างโค้ดการเดินทางไปยังจุดเป้าหมาย


using UnityEngine;
using UnityEngine.AI;

public class AINavigation : MonoBehaviour
{
    public Transform target; // ตำแหน่งเป้าหมายที่ AI จะเดินไป
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent(); // เข้าถึงคอมโพเนนต์ NavMesh Agent
        agent.SetDestination(target.position); // ตั้งตำแหน่งเป้าหมาย
    }
}

คำอธิบายโค้ด

  • ตัวแปร target คือจุดที่เราต้องการให้ AI เคลื่อนที่ไป
  • ฟังก์ชัน SetDestination() จะบอกให้ AI เดินไปยังตำแหน่งของ target

การเดินลาดตระเวน (Patrolling)

หนึ่งในพฤติกรรมของ AI ที่พบได้บ่อยในเกมคือการเดินลาดตระเวนตามเส้นทางที่กำหนด ซึ่ง AI จะเคลื่อนไหวไปมาระหว่างจุดต่าง ๆ ในฉาก เราสามารถกำหนดพฤติกรรมนี้ได้โดยใช้ Waypoints หรือจุดหมายปลายทางต่าง ๆ ที่กำหนดให้ AI เดินไปถึงก่อนที่จะย้ายไปจุดต่อไป

ตัวอย่างโค้ดการเดินลาดตระเวน


using UnityEngine;
using UnityEngine.AI;

public class AIPatrol : MonoBehaviour
{
    public Transform[] waypoints; // จุดหมายปลายทางที่ AI จะเดินไป
    private NavMeshAgent agent;
    private int currentWaypointIndex = 0;

    void Start()
    {
        agent = GetComponent();
        agent.SetDestination(waypoints[currentWaypointIndex].position);
    }

    void Update()
    {
        // ตรวจสอบว่า AI มาถึงจุดหมายหรือยัง
        if (!agent.pathPending && agent.remainingDistance < 0.5f)
        {
            GoToNextWaypoint();
        }
    }

    void GoToNextWaypoint()
    {
        // ย้ายไปยังจุดหมายปลายทางถัดไป
        currentWaypointIndex = (currentWaypointIndex + 1) % waypoints.Length;
        agent.SetDestination(waypoints[currentWaypointIndex].position);
    }
}

คำอธิบายโค้ด

  • ตัวแปร waypoints เป็นอาร์เรย์ที่เก็บจุดหมายปลายทางหลายจุดที่ AI จะเดินไป
  • ฟังก์ชัน GoToNextWaypoint() จะทำให้ AI เคลื่อนไปยังจุดถัดไปในอาร์เรย์อย่างต่อเนื่อง เมื่อ AI ไปถึงจุดหนึ่งแล้ว จะเคลื่อนที่ไปยังจุดต่อไปเรื่อย ๆ

การไล่ตามผู้เล่น (Chasing Player)

อีกหนึ่งพฤติกรรมที่ใช้บ่อยในเกมคือการที่ศัตรูไล่ตามผู้เล่น (Chase) โดยเราจะทำให้ AI ตรวจจับว่าผู้เล่นอยู่ใกล้พอที่จะไล่ตามหรือไม่ และให้ AI เคลื่อนที่ไปยังตำแหน่งของผู้เล่นเมื่อผู้เล่นเข้ามาในระยะที่กำหนด

ตัวอย่างโค้ดการไล่ตามผู้เล่น


using UnityEngine;
using UnityEngine.AI;

public class AIChase : MonoBehaviour
{
    public Transform player; // ตำแหน่งของผู้เล่น
    public float chaseRange = 10f; // ระยะการตรวจจับผู้เล่น
    private NavMeshAgent agent;
    private bool isChasing = false;

    void Start()
    {
        agent = GetComponent();
    }

    void Update()
    {
        float distanceToPlayer = Vector3.Distance(player.position, transform.position);

        // หากผู้เล่นอยู่ในระยะตรวจจับ ให้ AI ไล่ตามผู้เล่น
        if (distanceToPlayer < chaseRange)
        {
            isChasing = true;
            agent.SetDestination(player.position);
        }
        else
        {
            isChasing = false;
            agent.ResetPath(); // หยุดไล่ตามเมื่อผู้เล่นออกนอกระยะ
        }
    }
}

คำอธิบายโค้ด

  • ตัวแปร chaseRange ใช้กำหนดระยะที่ AI จะเริ่มไล่ตามผู้เล่น
  • ฟังก์ชัน Vector3.Distance() คำนวณระยะห่างระหว่างตัวละคร AI และผู้เล่น หากผู้เล่นอยู่ในระยะที่กำหนด AI จะเริ่มไล่ตามผู้เล่น

การเพิ่มพฤติกรรมอื่น ๆ ให้กับ AI

นอกจากการเดินลาดตระเวนและการไล่ตามผู้เล่นแล้ว เรายังสามารถเพิ่มพฤติกรรมอื่น ๆ ให้กับ AI ได้ เช่น การโจมตีเมื่อผู้เล่นอยู่ใกล้ การซ่อนตัว หรือการป้องกันตัวเอง ซึ่งการพัฒนา AI ที่มีพฤติกรรมหลากหลายจะทำให้เกมดูน่าสนใจและท้าทายมากขึ้น

ตัวอย่างโค้ด AI โจมตีเมื่อผู้เล่นเข้าใกล้


using UnityEngine;

public class AIAttack : MonoBehaviour
{
    public Transform player;
    public float attackRange = 2f;
    public float attackCooldown = 1f;
    private float nextAttackTime = 0f;

    void Update()
    {
        float distanceToPlayer = Vector3.Distance(player.position, transform.position);

        if (distanceToPlayer < attackRange && Time.time >= nextAttackTime)
        {
            AttackPlayer();
            nextAttackTime = Time.time + attackCooldown; // ตั้งเวลาสำหรับการโจมตีครั้งถัดไป
        }
    }

    void AttackPlayer()
    {
        Debug.Log("AI โจมตีผู้เล่น!");
        // เพิ่มโค้ดสำหรับการลดพลังชีวิตของผู้เล่นที่นี่
    }
}

คำอธิบายโค้ด

  • AI จะโจมตีผู้เล่นเมื่อผู้เล่นอยู่ในระยะที่กำหนด (attackRange) และตั้งเวลาสำหรับการโจมตีครั้งถัดไปโดยใช้ attackCooldown

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


Free Joomla templates by Ltheme