Як змусити NPC переслідувати гравця в Unity за допомогою NavMesh

У цьому підручнику ми використаємо систему Unity NavMesh, щоб створити NPC, який переслідуватиме гравця. NavMesh забезпечує ефективне визначення шляху та уникнення перешкод, що робить його ідеальним для поведінки AI у 3D-середовищі.

Крок 1: Налаштування сцени

Перш ніж реалізувати NavMesh, нам потрібно правильно налаштувати сцену:

  1. Створіть новий 3D-проект у Unity.
  2. Додайте площину, яка буде служити землею.
  3. Додайте Cube або будь-яку 3D-модель для представлення гравця. Назвіть його Player.
  4. Додайте інший Cube або 3D-модель для представлення NPC. Назвіть його NPC.
  5. Розмістіть гравця та NPC у різних місцях на літаку.

Крок 2: Запікання NavMesh

Щоб використовувати систему Unity NavMesh, нам потрібно запекти навігаційну сітку:

  1. Виберіть базову площину в ієрархії.
  2. В інспекторі натисніть Add Component і додайте NavMeshSurface.
  3. У компоненті NavMeshSurface переконайтеся, що площину позначено як поверхню, по якій можна ходити.
  4. Натисніть кнопку Bake у компоненті NavMeshSurface, щоб створити NavMesh.
  5. Додатково: якщо у вас є перешкоди (наприклад, стіни), переконайтеся, що вони мають компоненти NavMeshObstacle, щоб блокувати рух NPC.

Крок 3: Додавання NavMeshAgent

Тепер ми підготуємо NPC до використання функції пошуку шляху Unity:

  1. Виберіть NPC в ієрархії.
  2. В інспекторі натисніть Add Component і додайте NavMeshAgent.
  3. За потреби налаштуйте властивості NavMeshAgent, наприклад швидкість, прискорення та зупинковий шлях.

Крок 4: Написання сценарію Chase

Далі ми створимо скрипт, який змусить NPC переслідувати гравця:

  1. Клацніть правою кнопкою миші на панелі проекту та виберіть Create > C# Script. Назвіть його NPCChase.
  2. Двічі клацніть сценарій, щоб відкрити його в редакторі коду.
  3. Замініть стандартний код таким:
using UnityEngine;
using UnityEngine.AI;

public class NPCChase : MonoBehaviour
{
    public Transform player; // Reference to the player's position
    private NavMeshAgent agent; // Reference to the NavMeshAgent

    void Start()
    {
        // Get the NavMeshAgent component
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (player != null)
        {
            // Set the agent's destination to the player's position
            agent.SetDestination(player.position);
        }
    }
}

Крок 5: Призначення сценарію та посилання програвача

Нарешті, ми призначимо сценарій і налаштуємо посилання Player:

  1. Виберіть NPC в ієрархії.
  2. Перетягніть сценарій NPCChase на NPC.
  3. В інспекторі знайдіть у сценарії поле Player.
  4. Перетягніть Player GameObject з ієрархії в поле Player.

Крок 6: Тестування сцени

Щоб перевірити налаштування:

  1. Натисніть кнопку Play у редакторі Unity.
  2. Переміщайте програвач (наприклад, за допомогою клавіатури або контролера).
  3. Спостерігайте, як NPC динамічно шукає шлях і переслідує гравця, уникаючи перешкод, де це можливо.

Додатково: налаштування поведінки

Ви можете додатково вдосконалити поведінку свого NPC:

  • Відстань зупинки: Налаштуйте Дистанцію зупинки NavMeshAgent, щоб NPC зупинився на певній відстані.
  • Уникнення перешкод: Переконайтеся, що перешкоди мають компоненти NavMeshObstacle для точного уникнення.
  • Анімація: Використовуйте анімацію, щоб зробити рух NPC більш реалістичним, запускаючи анімацію на основі швидкості.

Висновок

Ми створили NPC, який динамічно переслідує гравця за допомогою системи Unity NavMesh. Цей підхід надійний і може бути легко розширений для більш складної поведінки ШІ. Експериментуйте з різними налаштуваннями, щоб адаптувати пошук NPC до потреб вашої гри.