Game Maker - создание игр | HellRoom Games
Февраль 08, 2025, 07:23:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Unity3D - NavMesh  (Прочитано 4955 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alcatraz
Flight Dream Studio
«Старожил форума»
******

Репутация: 392
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: C#, C++, UNITY3D
Сообщений: 3392


http://vk.com/alcatraz_rus


WWW
« : Май 20, 2012, 18:25:24 »

Автор статьи: Никита Курбатов a.k.a. Aut| Flight Dream Studio

Здравствуйте. Я знаю, что такие туториалы вроде в интернете есть, но я напишу специально для 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#
Код:
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'а
}
}
Итак. Вот скрипты. Но мы не указали агент в JS. Там мы уж укажем агент в инспекторе (извините, моя проблема перевода скриптов с C# на JS).
Теперь переходим в редактор. Вешаем скрипт на объект с NavMeshAgent'ом. Если C#, то ничего в инспекторе указывать не надо. А если JS, то укажем агент. То есть перенесём самого персонажа туда. Теперь тестим! Всё работает! Но это ещё не всё.
Дополнительная информация к статье: Чтобы сделать так, чтобы агент обходил стены, то им надо поставить слой "Default" (ну, всё так же, как и у поверхности). Ну... Это всё) До скорых встреч! Так же пользуйтесь справкой по юнити, чтобы побольше узнать о скриптах NavMesh. Ведь на NavMesh можно построить хороший ИИ и сократить кол-во строчек кода!
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.088 секунд. Запросов: 30.