Як змусити NPC переслідувати гравця в Unity за допомогою NavMesh
У цьому підручнику ми використаємо систему Unity NavMesh, щоб створити NPC, який переслідуватиме гравця. NavMesh забезпечує ефективне визначення шляху та уникнення перешкод, що робить його ідеальним для поведінки AI у 3D-середовищі.
Крок 1: Налаштування сцени
Перш ніж реалізувати NavMesh, нам потрібно правильно налаштувати сцену:
- Створіть новий 3D-проект у Unity.
- Додайте площину, яка буде служити землею.
- Додайте Cube або будь-яку 3D-модель для представлення гравця. Назвіть його Player.
- Додайте інший Cube або 3D-модель для представлення NPC. Назвіть його NPC.
- Розмістіть гравця та NPC у різних місцях на літаку.
Крок 2: Запікання NavMesh
Щоб використовувати систему Unity NavMesh, нам потрібно запекти навігаційну сітку:
- Виберіть базову площину в ієрархії.
- В інспекторі натисніть Add Component і додайте NavMeshSurface.
- У компоненті NavMeshSurface переконайтеся, що площину позначено як поверхню, по якій можна ходити.
- Натисніть кнопку Bake у компоненті NavMeshSurface, щоб створити NavMesh.
- Додатково: якщо у вас є перешкоди (наприклад, стіни), переконайтеся, що вони мають компоненти NavMeshObstacle, щоб блокувати рух NPC.
Крок 3: Додавання NavMeshAgent
Тепер ми підготуємо NPC до використання функції пошуку шляху Unity:
- Виберіть NPC в ієрархії.
- В інспекторі натисніть Add Component і додайте NavMeshAgent.
- За потреби налаштуйте властивості NavMeshAgent, наприклад швидкість, прискорення та зупинковий шлях.
Крок 4: Написання сценарію Chase
Далі ми створимо скрипт, який змусить NPC переслідувати гравця:
- Клацніть правою кнопкою миші на панелі проекту та виберіть Create > C# Script. Назвіть його NPCChase.
- Двічі клацніть сценарій, щоб відкрити його в редакторі коду.
- Замініть стандартний код таким:
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:
- Виберіть NPC в ієрархії.
- Перетягніть сценарій NPCChase на NPC.
- В інспекторі знайдіть у сценарії поле Player.
- Перетягніть Player GameObject з ієрархії в поле Player.
Крок 6: Тестування сцени
Щоб перевірити налаштування:
- Натисніть кнопку Play у редакторі Unity.
- Переміщайте програвач (наприклад, за допомогою клавіатури або контролера).
- Спостерігайте, як NPC динамічно шукає шлях і переслідує гравця, уникаючи перешкод, де це можливо.
Додатково: налаштування поведінки
Ви можете додатково вдосконалити поведінку свого NPC:
- Відстань зупинки: Налаштуйте Дистанцію зупинки NavMeshAgent, щоб NPC зупинився на певній відстані.
- Уникнення перешкод: Переконайтеся, що перешкоди мають компоненти NavMeshObstacle для точного уникнення.
- Анімація: Використовуйте анімацію, щоб зробити рух NPC більш реалістичним, запускаючи анімацію на основі швидкості.
Висновок
Ми створили NPC, який динамічно переслідує гравця за допомогою системи Unity NavMesh. Цей підхід надійний і може бути легко розширений для більш складної поведінки ШІ. Експериментуйте з різними налаштуваннями, щоб адаптувати пошук NPC до потреб вашої гри.