🗺️ NavMesh - поиск пути и перемещение по карте [Unity 3D] [Tutorial]

Поделиться
HTML-код
  • Опубликовано: 7 мар 2019
  • С помощью системы Nav Mesh можно сделать множество вещей связанных с перемещением объектов в игре - управление юнитами игрока, перемещение NPC по карте, поиск пути в лабиринте. В этом видео я расскажу как этим всем пользоваться в Unity 3D, покажу как использовать Nav Meshes на карте с движущимися препятствиями, или на процедурно-генерируемом уровне, создавать разные типы юнитов и зон
    Содержание:
    Как подключить NavMesh Components - 0:17
    Простая навигация и прыжки - 0:52
    Движущиеся препятствия и NavMesh Obstacle - 6:56
    Генерация NavMesh из скрипта - 9:55
    Ссылка на NavMesh Components: github.com/Unity-Technologies...
    На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
    Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео

Комментарии • 95

  • @vlados4105
    @vlados4105 4 года назад

    Огромное спасибо за урок! Все понятно, информативно и с отличным объяснением как это работает и для чего это используется! Продолжай в том же духе, у тебя отлично получается. Из всех пересмотренных мною видосов по юнити только у тебя понятное изложение материала и нормально объяснение.

  • @seldemirov
    @seldemirov 5 лет назад +61

    Самое адекватное изложение работы в юнити что я встречал. Спасибо.)
    Очень хотелось бы увидеть уроки по генеративным лакациям, о которых упомяналось в видео.

  • @DARKNETOFFICIAL
    @DARKNETOFFICIAL 3 года назад +1

    ОГРОМНОЕ СПАСИБО, решил сделать стратегию но столкнулся с проблемой поиска пути, везде показывают какие-то сложные алгоритмы но благодаря этому видео нашел удобный и быстрый способ реализовать это

  • @dkvChannel
    @dkvChannel 2 года назад +1

    Отличное видео! Я уже голову сломал как то же самое организовать самому, но похоже применю это. Спасибо за труд!

  • @user-kc6uw7qw6j
    @user-kc6uw7qw6j 2 года назад

    Большое спасибо за видео, вы один из лучших Unity каналов на RUclips

  • @quadath3963
    @quadath3963 3 года назад +1

    Случайно видео попалось в рекомендации, спасибо большое, для меня давно стояла эта проблема поиска пути, спасибо больше ещё раз

    • @quadath3963
      @quadath3963 3 года назад

      Но что насчёт 2д?

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    Ты лучший, я не новичек, может по этому я так считаю, но это белиссимо!!! без эканей, все четко и по делу, вообщем мне помог, документацию даже не пришлось читать!!!

  • @user-df7zl1dh9c
    @user-df7zl1dh9c 5 лет назад +9

    Очень полезный урок! Продолжай в том же духе!

  • @Abuir1
    @Abuir1 8 месяцев назад +1

    спс большое, сильно упростил написание скриптов для врагов в рогъюлайте

  • @devdem
    @devdem 5 лет назад +3

    Я этот видос ещё не смотрел, но просто хочу сказать благодарность за такой контент) реально годные видосы, с хорошим звуком и картинкой, желаю набрать куча просмотров и аудитории. Ну, а если нужна идея, то было бы неплохо показать симуляцию планет в 2D. Вы хоть и сказали, что все будет работать и в 2D, но чего-то у меня сегодня не получилось, весь скрипт перелопатил, а все равно не получается ( спасибо за видосы и удачи)

  • @amurlamur3125
    @amurlamur3125 4 года назад +3

    Спасибо огромное за урок, помог найти ошибку

  • @user-we6si4mi3x
    @user-we6si4mi3x Год назад

    Спасибо за урок !!)

  • @MorfixProton
    @MorfixProton 11 месяцев назад +1

    Спасибо автору!

  • @WiRight
    @WiRight 4 года назад +4

    Огромное спасибо Вам за Ваши труды! Все видео доступно и качественно объясняют работу с Unity3D. Желаю только увеличение контента! И мобильной разработки)

  • @user-zr2wx3by2s
    @user-zr2wx3by2s 3 года назад

    Ты лучший по туторам

  • @David-jv6xx
    @David-jv6xx 5 лет назад +2

    Спасибо ХорошАя работа

  • @cfl3845
    @cfl3845 2 года назад

    Братан, помог, от души. В другом видосе даже не говорил о том что нужен ассет для передвижения юнитов...

  • @MsWital
    @MsWital 4 года назад +2

    Отличный урок) спасибо)

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    отличное видео

  • @Ventallica
    @Ventallica 3 года назад +1

    Сссииииллаа! Очень круто! Спасибо 👍🏻👍🏻👍🏻

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    супер объяснил

  • @user-gq7wt3zs1t
    @user-gq7wt3zs1t 3 года назад

    Максимально доходчиво. Спасибо большое!

  • @HumorANDCHannel
    @HumorANDCHannel 3 года назад

    Чувааааак это круто

  • @nomilon3770
    @nomilon3770 2 года назад

    Круто

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    и еще таких)))

  • @victortrach9085
    @victortrach9085 4 года назад

    Привет, спасибо за твои видео, смотрю с удовольствием.
    Есть просьба, сделай пожалуйста видео по модификаторам доступа.
    В качественном коде, какие свойства нужно делать private а какие можно public

  • @ShadeZlat
    @ShadeZlat 3 года назад

    не подскажешь как сделать, чтобы ускорение было и у drop height? при прыжке на одном уровне ускорение есть, но при падении с высот действует обычная скорость агента почему-то, в документациях ничего толком нет про это, может ты сталкивался? спасибо

  • @The_Mavrik
    @The_Mavrik 2 года назад

    Привет. Давай новые видосики !!! У тебя они самые чёткие

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    Вот реально от души я тебе коменатриев нахерачу)))

  • @user-qr8cj3eb9o
    @user-qr8cj3eb9o 2 года назад

    Я всё это лучами в ручную делал) 🥺

  • @user-mh2ll7cg7x
    @user-mh2ll7cg7x 3 года назад

    Отличный урок, можно ли узнать где то о дополнительных функциях, например что бы при перепрыгивании например поменялась анимация на персонаже, то есть событие от куда можно брать, и есть ли мануал по функциям?

  • @user-qg1kd4zi3g
    @user-qg1kd4zi3g 4 года назад +6

    Спасибо за отличный урок, хотелось бы увидеть урок, как патрулирует и реакцию игрока при обнаружении, . При потери игрока, возврата на прежнию позицию.

    • @Mr.Epsilion
      @Mr.Epsilion 4 года назад +1

      Могу книгу посоветовать...

    • @adetyty5251
      @adetyty5251 3 года назад

      Патрулирование в программе циклом делаешь, а обнаружение делаешь лучами и выходом из этого цикла.

    • @_shon3266
      @_shon3266 2 года назад

      Наверно уже не актуально, но сам стараюсь в таких случаях state machine писать, плюс добавлять новые состояния не составит труда.
      Но если буквально парочка таких состояний, то можно что то попроще.

  • @MaverixGamesStudio
    @MaverixGamesStudio 5 лет назад

    No vas a entender nada de lo que ponga, y no entendí nada de lo que dijiste, pero aprendí viendo y practicando lo que hiciste, no había visto un tutorial de Navmesh tan sencillo, Gracias

    • @EmeraldPowder
      @EmeraldPowder  5 лет назад

      Thanks! Google Translate helped, glad that my tutorials so visualy helpful, I'll try to add at least English subtitles

    • @MaverixGamesStudio
      @MaverixGamesStudio 5 лет назад

      @@EmeraldPowder thank you, i can handle a english conversation

  • @Einxeld
    @Einxeld 2 года назад +2

    Спасибо за прекрасное объяснение.
    Только теперь не нужно скачивать скрипты с гитхаба, а всё уже есть в AI Navigation package.

    • @qbicvideo
      @qbicvideo 2 года назад

      Всё верно

  • @spider853
    @spider853 2 года назад

    Спасибо за интро про старого навмеша, думал схожу сума, сделал буйлд от туда, и потом не понимал почему объект проходит сквозь... сделал клир и все ок

  • @nomadik003
    @nomadik003 3 года назад

    А можно ли использовать NavMeshSurface другими скриптами? Например я реализую свой алгоритм поиска пути, не используя navmeshagent, но алгоритм не учитывает препятствия, которые могут быть на уровне. Могу ли я как-то использовать результаты запекания карты NavMeshSurface или все-таки тут нужно делать свою реализацию обнаружения объектов?

  • @seriousserega2496
    @seriousserega2496 2 года назад

    Привет, а есть ли такой инструмент, но для проложения пути по сфере?

  • @alicewithalex
    @alicewithalex 5 лет назад +12

    Очень познавательно, но можно попросить о туториале, где ты сможешь рассказать, как сделать, чтобы персонаж перепрыгивал обрыв или забирался куда-то с нужной анимацией. То есть интересует как синхронизировать это всё) Заранее спасибо)

    • @--.--
      @--.-- 4 года назад

      Добавить триггер на грани обрыва и при касании проигрывать анимацию

    • @getmanovich377
      @getmanovich377 3 года назад

      ruclips.net/video/blPglabGueM/видео.html&ab_channel=Brackeys

  • @schevgeny
    @schevgeny 3 года назад

    получается этой штукой можно заставить nps гулять по дорожкам по карте
    от домика к домику и они сами будут искать кратчайший путь?

  • @Th3_V3ct0rAT2
    @Th3_V3ct0rAT2 2 года назад

    А можно сделать так чтобы без нав меш прыжка объект самостоятельно находил обрывы и прыгал с них на ближайшие платформы? Ну точнее говоря чтобы нав меш прыжок автоматически появлялся?

  • @MementoMoriLife
    @MementoMoriLife Год назад +1

    2023 год, NavMeshSurface до сих пор не встроена в Unity3d

  • @dkvChannel
    @dkvChannel Год назад +1

    В версии юнити 2022.х мне пришлось установить Visual Studio Editor, Visual Studio Code Editor и AI Navigation через Package Manager. Без этого не работало.

  • @Veyron104
    @Veyron104 4 года назад

    странно, у меня выдало предупреждение
    RuntimeNavMeshBuilder: Source mesh Combined Mesh (root: scene) does not allow read access. This will work in playmode in the editor but not in player
    UnityEngine.AI.NavMeshSurface:BuildNavMesh()
    получается в самой игре это не проканает?

  • @user-df7zl1dh9c
    @user-df7zl1dh9c 5 лет назад +1

    При скачивании скрипта у меня появились тонны ошибок в консоле, версия 2018.2Of.2

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    вот таких

  • @user-mw2cd3lu8n
    @user-mw2cd3lu8n 4 года назад +1

    Ignore from build не странная штука, а как раз таки необходимая, т.к. в рантайме зачастую проблематично слои менять.

  • @KirZabo
    @KirZabo Год назад

    Не знаю, актуально ли это, но возможно как-то создать что-то на подобе некстбота из Garry's mod? Я уже вроде бы придумал, как это реализовать, но не уверен в точности данного способа. Я думаю, можно создать плоскость, на которую закидывается скрипт, который вечно поворачивает плоскость на камеру, и ещё добавить коллайдер сферы. Вроде, если получившийся объект скомбинировать с данным скриптом, то может получится что-то похожее.

  • @user-iq7pe6sy4y
    @user-iq7pe6sy4y 3 года назад +1

    Не знаю насколько вам нужно это обновление, по чему то до сих пор так и не встроенное в редактор, Но сетка прорисованная стандартным сделала проходи под дверями и вообще захватила большую площадь, Новая же повешенная вот так на объект как показано на видео, не сделала соединения под дверями, по карте очень много зон не покрыты, хотя там вполне можно ходить, как результат удалил к чертям это ручное обновление. Не вижу смысла, поставь там где надо что б не ходили кирпич, запеки, и удали кирпич. Очень жаль что нельзя вручную рисовать.

  • @dekokoplay
    @dekokoplay 2 года назад +1

    Здравствуйте. Нужна помощь. Я сделал свою 3д модель и ии странно себя ведёт он пытается пройти в узкую щель и игнорирует любой другой маршрут помогите

  • @d1mple05
    @d1mple05 2 года назад

    Как заставит нпс идти к определенномв обьекту?

  • @nightkot4917
    @nightkot4917 Год назад +1

    Для созданных из пула объектов не подходит. "SetDestination" can only be called on an active agent that has been placed on a NavMesh.

  • @noobool
    @noobool 4 года назад +1

    Спасибо за видео, хотелось бы узнать кое что, когда я нажимаю bake - ничего ен происходит. Ну, то есть, он что то запекает вроде, но никакой сетки не появляется. Как можно решить эту проблему?

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Может быть коллайдеров нет на объектах? Должны быть именно 3D коллайдеры, если стоит запекание по ним. И слои на которых объекты тоже стоит проверить, возможно какие-то исключены из запекания

    • @amurlamur3125
      @amurlamur3125 4 года назад

      ruclips.net/video/GmbbU-RytGg/видео.html
      Для тех у кого проблема с SetDestiniation

    • @Bald_Panther
      @Bald_Panther 3 года назад

      Запекает, только сетку не показывает. Тоже было так. У меня был Gizmos выключен, поэтому сетку не показывал. Думаю, у тебя так же.

  • @user-lh2xr3pe2v
    @user-lh2xr3pe2v 5 лет назад

    Спасибо за урок, довольно коротко и по существу, без воды. У меня вопрос к вам. Никак не могу найти такого же инструмента, но для 2,5 d игры. Ну например кабан нападает на плеера, и по пути обходит препятствия, но только в 2d игре с видом сверху. Быть может вы посоветуете что-нибудь? Ну если видос запилите, то век вам буду благодарен. Да и ничего похожего нет в тырнетах, наверно смотреть будут люди.

  • @VolkGam
    @VolkGam 4 года назад

    Скопировал папку NavMeshComponents в проект как вы сказали... Вылезла ошибка (версия Unity 2019.3.7f): Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed. Случайно не знаете, почему и что делать? Спасибо!

    • @VolkGam
      @VolkGam 4 года назад +1

      А... Перезапустил Unity - вроде ошибка пропала... ) Бред какой-то... Хотя в Unity многое решается перезаходом... ))

  • @wiaslak4962
    @wiaslak4962 3 года назад

    Большое спасибо за видео, очень помогло! но у меня вопрос как сделать маркер в том месте куда идет персонаж, чтобы было видно куда кликнул, подскажите очень прошу!!!!!!

  • @ilyalonginov7880
    @ilyalonginov7880 4 года назад +2

    Всем доброго времени суток. Прошу, помогите с проблемой! Которые сутки копаюсь и понять не могу.
    У меня выдаётся ошибка в коде NavMeshSurface, а конкретно - 16-я строчка кода [ExecuteAlways] горит красным и выдаётся замечание
    "Не удалось найти имя типа пространства имён ExecuteAlways (пропущена директива using или ссылка на сборку)"
    Сам я никак не могу догадаться, где найти эту ссылку на сборку, куда её вписать, Куда я только эту директиву using не вставлял и какие только библиотеки не подключал. Нигде ответов на решение данной проблемы нету. У меня по той-же причине не запускается и оригинальный игровой проект, от которого все люди копируют папку с компонентами и скриптами, в частности NavMeshSurface. Прошу, помогите мне понять, что у меня не так, ведь я пересмотрел уже десятки роликов по данной теме и удалял/качал все эти скрипты и папки множество раз. У всех на видео всё отлично и без ошибок. Что у меня,никак понять не могу

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    и таких

  • @FreexYouTube
    @FreexYouTube 4 года назад

    как выключить инерцию? Почему персонаж при клике в противоположную сторону какое то время двигается по инерции, при отсутствии физики

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Там есть Acceleration у NavMeshAgent, и ещё несколько параметров, можешь их попробовать подкрутить, чтобы резче двигался

  • @BRYAMARE02
    @BRYAMARE02 5 месяцев назад

    а что делать если нет Nav Mesh Agent?

  • @talit35
    @talit35 2 года назад

    Здравствуйте, как убрать территорию по которой юнит не должен идти?

  • @rayankrimmer2611
    @rayankrimmer2611 Год назад

    А как переместить именно через свой PlayerControll? Без компонента NavMeshAgent

    • @KrutaMan
      @KrutaMan Год назад

      NavMeshPath path = new NavMeshPath();
      bool pathExists = NavMesh.CalculatePath(transform.position, moveTo.position, layerMask, path);
      // path.corners.Length - массив точек по которым рассчитан маршрут

  • @neverworld8815
    @neverworld8815 2 года назад +1

    Конечно штука неплохая, но дико раздражает что он строго двигается по крайним точкам, например в каких-то тунелях он всегда придерживается стены а не идёт по центру, а если увеличить радиус то он начинает тормозить и стоять на месте по минуте даже если угловая скорость максимальная

  • @user-iq7pe6sy4y
    @user-iq7pe6sy4y 3 года назад

    Выложил готовый скр для NPC, а то все показывают на плеере, а плееру навмеш как зайцу стоп сигнал, он в основном для НПС используется.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.AI;
    public class Man5Control : MonoBehaviour
    {
    NavMeshAgent Man5Navi;
    //Animator Man5Anim; //ваш аниматор персонажа
    //public GameObject CubeResources;// мой объект с часами
    private int Man5Time; //Время в цифрах
    private Vector3 targetPos;

    private void OnEnable()// запускается при активации персонажа, то есть можете отключать нпс сколько хотите а потом включать.
    // это вместо старта. Старт здесь как по мне неуместен.
    {

    Man5Navi = GetComponent();
    // Man5Anim = GetComponent();
    StartCoroutine(Man5Updator());
    }
    IEnumerator Man5Updator()
    {
    //Man5Time = CubeResources.GetComponent().GameMin;
    // if (Man5Time > 9 && Man5Time < 16)// Если есть игровые часы то здесь привязываем, так делаем график НПС
    // {
    targetPos = new Vector3(354.0f, 12.0f, 514.0f);// Здесь указываем куда ему идти в точных координатах.
    Man5Navi.SetDestination(targetPos); // Основная команда на передвижение
    // }
    yield return new WaitForSeconds(1.0f); // обновляется каждую секунду, что б не загадить Updat
    RepCourMan5();// зацикливаем корутину
    yield break; // обязательно убиваем корутину, иначе будет 60 за минуту итд.
    }
    public void RepCourMan5()
    {
    StartCoroutine(Man5Updator());
    }

  • @sketchturner8229
    @sketchturner8229 2 года назад

    Не совсем понимаю, у меня нет NavMeshSurface, только agent и все.

  • @alibekgadzhibaev2528
    @alibekgadzhibaev2528 4 года назад

    ЛАВ Ю

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    дальше я устал писать))))

  • @vulpius4001
    @vulpius4001 2 года назад

    sao paulo na thumb fdc kkkkkkkkkkkkk

  • @user-rw1cc7cz4e
    @user-rw1cc7cz4e 3 года назад

    у меня почему-то персонаж передвигается не плавно, как будто микро рывками, не могу понять в чем причина, без navmesh персонаж движется плавно, как не менял параметры, все равно дергается, не дергается если только перемещается очень медленно. Была у кого еще такая проблема? Может есть какое то решение, я пользуюсь 18 юнити.

    • @user-rw1cc7cz4e
      @user-rw1cc7cz4e 2 года назад

      @@Derk89 и 19 тоже

    • @user-rw1cc7cz4e
      @user-rw1cc7cz4e 2 года назад

      @@Derk89 ну я на 18 тоже пытался это реализовать, но тоже самое, персонажи движутся рывками.

    • @user-rw1cc7cz4e
      @user-rw1cc7cz4e 2 года назад

      @@Derk89 или ты про версию юнити? Ты видать не через хаб пользуешься, лучше поставить хаб, там проще контролировать версии.

  • @deadman1114
    @deadman1114 2 года назад

    Я сделал хоррор игру... И по вашему гайду настроил херь которая приследует игрока, так вооот после запуска я обосрался... Не ожидал что окажется так страшно...

  • @realcritic7962
    @realcritic7962 4 года назад +1

    один из немногих роликов где есть то что мне нужно и нигде !!! нигде не найду как это сделать или не пашет нифига.. как тут сделана камера ???? видно что двигаешь камеру зажимая пкм или клм .. как это сделать к д2 ????? любые попытки найти как двигать камеру.. упирается в прикрепить камеру к игроку или еще куда.. но не курсором.. отпиши плз или еще ктонить.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад +1

      У меня тут вообще камера в игре никак не двигается, правой кнопкой я только в окне редактора её двигаю, и ставлю в текущее положение с помощью ctrl+shift+f. А вообще движение камеры курсором много разных вариантов как сделать, достойно отдельного видео

  • @amurlamur3125
    @amurlamur3125 4 года назад

    ruclips.net/video/GmbbU-RytGg/видео.html
    Для тех у кого проблема с SetDestiniation

  • @user-ts4vz3rg8j
    @user-ts4vz3rg8j 4 года назад

    пустых кометнов

  • @user-co3di5pd1c
    @user-co3di5pd1c 10 месяцев назад

    Мужик, можно было сначала пописить, а потом записывать ролик. Не надо было бы тогда так торопиться

  • @KrutaMan
    @KrutaMan Год назад

    Можно просто рассчитать путь и не использовать NavMeshAgent для перемещения, а сделать например свой агент со своими особенностями перемещения и т.д.
    NavMeshPath path = new NavMeshPath();
    bool pathExists = NavMesh.CalculatePath(transform.position, moveTo.position, layerMask, path);
    // path.corners.Length - массив точек по которым рассчитан маршрут