Здравствуйте. Я знаю, что такие туториалы вроде в интернете есть, но я напишу специально для gcup. Эта функция работает только в юнити версии 3.5. Итак... Приступим. Открываем Unity и создаём либо терраин, либо плоскость. Ставим ему слой Default и галку на Static. Как на скрине:
Теперь открываем окно Navigation в Windows => Navigation. Появилось такое окно. Теперь выбираем в Navigation Layer слой "Default" (если автоматически не стоит). И нажимаем Bake. Как на скрине:
У нас должна появиться синяя подсветка на поверхности.
Теперь создаём объект, который будет следовать за игроком (или за другим объектом, который укажем в скрипте). Указываем этому объекту компоненты Capsule Collider и Rigidbody (для чайников: это находится в окне Component => Physics). Теперь добавим ещё один компонент. Component => Navigation =>Nav Mesh Agent. Теперь устанавливаем радиус. И в Nav Mesh Walkable выбираем слой "Default". Вот как на скрине(к примеру):
Теперь, как я понимаю, многие поняли, для чего мы указываем слой. Агент движется по этому слою.
Теперь пришло время писать скрипт. Создадим скрипт и назовём его AINavMesh. И пишем: На C#
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'а } }
Или UnityScript (JavaScript)
Code
#pragma strict
var _target : Transform; // Указываем переменную, к которой будет двигаться наш агент var _agent : NavMeshAgent; // Указываем переменную агента
function Start () { // Тут мы не напишем. Почему - читайте ниже. }
function Update () { _agent.SetDestination(_target.position); // Заставляем агента двигаться в сторону _target'а }
Итак. Вот скрипты. Но мы не указали агент в JS. Там мы уж укажем агент в инспекторе (извините, моя проблема перевода скриптов с C# на JS).
Теперь переходим в редактор. Вешаем скрипт на объект с NavMeshAgent'ом. Если C#, то ничего в инспекторе указывать не надо. А если JS, то укажем агент. То есть перенесём самого персонажа туда. Теперь тестим! Всё работает! Но это ещё не всё.
Дополнительная информация к статье: Чтобы сделать так, чтобы агент обходил стены, то им надо поставить слой "Default" (ну, всё так же, как и у поверхности). Ну... Это всё) До скорых встреч! Так же пользуйтесь справкой по юнити, чтобы побольше узнать о скриптах NavMesh. Ведь на NavMesh можно построить хороший ИИ и сократить кол-во строчек кода!
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Unity3D NavMesh», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.