Всем привет! И это снова я! Так как про создание ИИ для FPS (First Personal Shooter) я закончил, я перехожу к следующей части серии своих уроков по NavMesh. Сейчас мы будем создавать искусственный интеллект врага для RPG (Role-Playing Game). Я надеюсь, что вы уже читали статью про сам NavMesh. И, желательно, прочитать статьи про создание ИИ для FPS (1, 2). Пишем на C#. Теперь приступим. У нас есть уже готовый скрипт для NavMesh:
Code
using UnityEngine; using System.Collections;
public class AINavMesh : MonoBehaviour { public Transform _target; // Указываем переменную, к которой будет двигаться наш агент NavMeshAgent _agent; // Указываем переменную агента
void Start () { _agent = (NavMeshAgent)this.GetComponent("NavMeshAgent"); // Указываем, что переменная _agent - это наш агент. }
void Update () { _agent.SetDestination(_target.position); // Заставляем агента двигаться в сторону _target'а } }
В отличие от FPS, RPG на мой взгляд, делать легче. Так что я уложусь и в один урок. Тут мы опять же (как и в FPS-уроке) прописываем в скрипте ИИ Новую строчку в методе (void) Update:
Code
GameObject player = GameObject.FindGameObjectWithTag("Player");
Опять же мы создаём переменную, и ищем (и помещаем) в неё GameObject с тэгом "Player". Теперь создадим ещё строчку:
То же что и в FPS: Тут мы проверяем, если дистанция от агента до игрока меньше ста. В скобочках ("{", "}") мы укажем что будет. ЗАПОМНИТЕ! _agent.SetDestination(_target.position); оставляем за проверкой расстояния! Теперь вернёмся к проверке. Тут мы укажем, что _target - это наш Player. Мы пишем:
Code
_target = player.transform;
Мы указали, что _target равен координатам нашей переменной player (та, у которой тэг). Проверям. Теперь враг идёт на нас, если мы подошли на определённое расстояние. Едем дальше. Теперь сделаем так, чтобы враг, как потерял игрока, возвращался на стартовую точку. Создадим переменную public Transform _home;. И создадим void Awake(){}. Поясняю. Этот метод при загрузке игры. И пишем:
Code
_home = transform.parent.transform;
То есть указываем координаты материнского объекта. Теперь переходим в редактор, создаём новый (пустой) GameObject. И помещаем в него нашего агента. Теперь опять к коду. После проверки дистанции делаем else (то есть иначе). И прописываем там:
Code
_target = _home;
Тут мы указываем, что объект, к которому движется агент - _home. Это всё я ещё объяснял в уроке для FPS. У нас получился код:
Так... Теперь мы пойдём в другую сторону. Раньше, для FPS, мы делали объекты оружия, пуль и т.д. Сейчас этого делать не надо. Мы сделаем проще (можете изменить под свой метод). Мы создадим переменную public AnimationClip _animationAttack;. И создавать новый метод (как тогда Fire()) не нужно. Мы просто создадим анимацию пару условий. Пишем в void Start() animation.AddClip(_animationAttack, "attack"); В условии если дистанция меньше 4 пишем animation.CrossFade("attack");. И в условии у нас получается:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание простого ИИ с помощью NavMesh(для RPG)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.