Всем привет! Сейчас мы будем создавать искусственный интеллект врага для RPG (Role-Playing Game). Теперь приступим. У нас есть уже готовый скрипт для "NavMesh":
Код
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:
Код
GameObject player = GameObject.FindGameObjectWithTag("Player");
Опять же мы создаём переменную, и ищем (и помещаем) в неё GameObject с тэгом "Player". Теперь создадим ещё строчку:
То же что и в FPS:
Тут мы проверяем, если дистанция от агента до игрока меньше ста. В скобочках ("{", "}") мы укажем что будет.
ЗАПОМНИТЕ! _agent.SetDestination(_target.position); оставляем за проверкой расстояния!
Теперь вернёмся к проверке. Тут мы укажем, что _target - это наш Player.
Мы пишем:
Код
_target = player.transform;
Мы указали, что _target равен координатам нашей переменной player (та, у которой тэг). Проверям. Теперь враг идёт на нас, если мы подошли на определённое расстояние. Едем дальше. Теперь сделаем так, чтобы враг, как потерял игрока, возвращался на стартовую точку. Создадим переменную public Transform _home;. И создадим void Awake(){}. Поясняю. Этот метод при загрузке игры. И пишем:
Код
_home = transform.parent.transform;
То есть указываем координаты материнского объекта. Теперь переходим в редактор, создаём новый (пустой) GameObject. И помещаем в него нашего агента. Теперь опять к коду. После проверки дистанции делаем else (то есть иначе). И прописываем там:
Код
_target = _home;
Тут мы указываем, что объект, к которому движется агент - _home.
Это всё я ещё объяснял в уроке для FPS. У нас получился код:
Так... Теперь мы пойдём в другую сторону. Раньше, для FPS, мы делали объекты оружия, пуль и т.д. Сейчас этого делать не надо. Мы сделаем проще (можете изменить под свой метод). Мы создадим переменную public AnimationClip _animationAttack;. И создавать новый метод (как тогда Fire()) не нужно. Мы просто создадим анимацию пару условий. Пишем в void Start() animation.AddClip(_animationAttack, "attack"); В условии если дистанция меньше 4 пишем animation.CrossFade("attack");. И в условии у нас получается: