2D Top Down игра на Unity с нуля #7 | Добавляем врага, NavMesh, State Machine
ฝัง
- เผยแพร่เมื่อ 12 ก.ย. 2024
- В этом видео мы добавим первого врага. Опишем его машину состояний и зададим его движение с помощью NavMesh.
Спрайты главного героя и врагов:
drive.google.c...
Код урока:
github.com/tin...
Telegram канал с анонсами и помощью:
t.me/tinygames...
Discord:
/ discord
Поддержка канала:
boosty.to/tiny...
Top Down, вид сверху, topdown, unity 2d игра, unity, как создать игру, разработка игр, unity уроки, создание игр, unity tutorial, unity 2d, платформер, как сделать игру, 2d платформер, юнити, c# уроки, c#, c# unity, 2d, с# unity уроки, как скачать юнити, c# tutorial, cube company, c# unity tutorial, как сделать свою игру, програмирование, visual studio, learn unity c#, c# for unity, как начать создавать игры, c# dersleri, unity 2d tutorial, learning c# for unity, learn c#, learn c# for unity, курс по изучение с# unity, игры, c# tutorial for beginners, создание, геймдев, игра, для начинающих, создание игр unity, game, unity2d, platformer, 2д, как создать, tutorial, анимация, как создать свою игру, создание игр для новичков, как, gamedev, разработка, разработчик игр, обучение, инди игры, программирование, юнити уроки, design, основы, sprites, indie gamedev, геймдизайн, как сделать, unity уроки для начинающих, graphical, создание платформера unity, дизайн, графика, уроки по unity, assets, урок, игровые движки, уроки, персонаж, 2d игра, games, создание 2d игры, гайд, 2d platformer, unity 2d уроки, game dev, how to make game, unity 2d платформер, move, unity 5, код, создание игры, 2d platformer unity, asset store, animation, unity 3d tutorial, game dev для начинающих, спрайты, си шарп, как создать платформер на юнити, castadude, beginner, первая игра, unreal, юнити 3д, создание игр в unity, геймдев с нуля, android, управление в платформере на юнити, brackeys, уроки по юнити, development, develop, создание платформера на юнити, платформер юнити, геймдев с чего начать, как сделать управление на юнити, создание игры на unity, как создать игру на андроид, как сделать платформер, unity2d платформер, tutorials, 2д платформер, artalasky, пиксельарт, заргеймдев, юнити2д, для ничинающих, юнити 2д, уроки на русском, unity tutorial 2d, 2d unity, easy, курсы программирования, прыжок, unity создание игр, игра на unity, движение, jump, 2d спрайты, создать игру бесплатно, создание 2d игр, unity платформер уроки, 2d платформер на unity, игровая графика, игровой движёк, как создать игру на unity, уроки unity, упровление в unity, #unity, game design, zargamedev, графика для игр, void, войд, студия, public, паблик, unity 2д платформер, bool, privat,, юнити анимация персонажа, работа с персонажом, animations, flip, как создать 2d платформер, code, visual, юнити анимация, платформер на андроид unity, studio, как создать 2d платформер на unity, бул, stickman game, создание игры stickman, создание игры на unity 2d, создание босса, ultima offline, unity stickman, создание игры на unity 2d платформер, игра на unity 2d, unity,unity 2d для начинающих, создание персонажа, легко, №4, стрельба, 2д-платформер, course, unity2d смерть персонажа, unity2d воскрешение, переход между сценами, unity2d переход между сценами, счетчик монет, unity2d scenemanagement, scenemanagement, введение, фикс прыжка, главное меню, ui графика, монетки в unity, сбор монет, разработка игры, создание 2d платформера, python на практике, плавная камера, unity coint collect, сбор монеток в unity, игрок, атака персонажа, unity c#, онлайн обучение, любимая школа, айти геник, айтигеник, itgen, программист, школа для детей, создание врага, пауза, платформер на unity, персонаж для игры, itgenio, айтигенио, unity game, разработка игр на unity, tutorial unity, 3d unity game, unity 2019, разработка игр на андроид, unity platformer, твоя первая игра на unity, платформер на юнити, твоя первая игра на юнити, unreal engine 4, уроки python, pygame, to, howto, how, textures, models, learn, перевернуть, basic, coding, programming, series, texture, model, создание 2д платформера на юнити, bloodlust, создание игры на юнити 5, как сделать 2д игру на юнити, как сделать игру без программирования, юнити 5 урок, юнити 5 уроки платформер, asset, как сделать свою игру на юнити, как создать свою игру на андроид, платформер на unity 5
Вау, какой подробный разбор NavMesh, я никак не мог с ним разобраться, благодаря тебе начал понимать его структуру. Спасибо!
Офигеть, вот это годнота. Давно не мог найти нормальный туториал по NavMesh-у в 2д
Автор просто лучший! Одни из самых лучших видео уроков которые я видео!
Спасибо огромное за обучение!🙏🙏 До этого видео не знал как пользоваться навмешем
Огромное спасибо за твою просветительскую деятельность. :)
брат не останавливайся! ты красава помог, вот бы тебе написать задать вопросы лично, советы нужны)
респект тебе
Добавляйся в канал в телеграмм и спрашивай)
У кого не появляется синяя область - проверьте масштаб травы (Scale) у меня по иксу он был в минус. Я переписал координаты автора видео и все получилось.
спасибо
Бро, ты сделал гайд по NavMesh в 2Д. Желаю тебе творческого вдохновения, профессионального роста, подписался на тебя! Ты просто лучший! Жду новых видосов :)
Спасибо)
@@TinyGamesUnity я сейчас на старте и уже второй месяц изучаю юнити и с#. И как раз сейчас делаю topdown игру. Ты появился в моих рекомендациях просто идеально вовремя!)
Ты, молодец продолжай в том же духе
Просто лучшие уроки которые я видел!))) Спасибо!
Супер! Спасибо 🙏🏻
Кайф
Давно хотел найти норм видос про navmesh
Ура первый урок, где все заработало с первого раза и без танцев с бубном)))
Круто расмотрим такой вариант чтобы после убийства врага с него выпадал предмет рандомный А-то тяжко найти что-то типо етого на топ давн
Да, мы это реализуем, но в более поздних уроках.
а что вам машет сделать пару методов типа как фабрика с рандомно гененируемыми дропами и что бы он срабатывал после смерти врага.
или можно тупо через рандом 3-4 префаба и инстантиате это сделать.
Главное сначала создавать предмет а потом дестроить врага иначе скрипт будет пропадать и ничего не создаст
Вроде navmesh можно перезапечь из кода
Огромное тебе спасибо за каждое твое видео, за разъяснения и подробности!
К слову о запекании, синяя область появилась лишь на 6-ую попытку, почему так пока что нет предположений...
Это нечто, мало того что учишься делать игру, так еще и начинаешь вникать в C#, супер. Как всегда одна из лучших обучающих серий роликов по Юнити.
Самые крутые и интересные уроки в мире
офигенные уроки. Самые понятные на русском
Спасибо за уроки! Лайк + подписка
Кто то сталкивался, что видимо "область не запекается", и персонаж и слизни выходят за границы.
Сделал ровно в порядке как сказал автор, на 17:37
ага, UPD - про персонажа, понял что на него и не должно влиять. А с слизнями интереснее - сам объект Smile остается в пределах, а вот если пнуть его - то объект SmileVisual улетает, хотя сам объект Smile остается в пределах и продолжает бродить
Ура, новый урок, спасибо!
спрайт поворачивается почему то, хотя настроен как у тебя
его navmesh поворачивает
Очень годное видео! Спасибо Тини!
Если у вас возникает проблема в отсутствии AI Navigation - проверьте свою версию Unuty. У меня стояла версия 2021 года, потому и небыло
и как решить ?
@@user-wc6hh6lm6z Версию Unity обновить)
Ты топ #1
Спасибо за урок!
Ничего не понял. (я вообще первый раз запустил всё это) Повторял за автором на автопилоте. Натыкал деревьев, камней и кустов. Ну пока всё работает. :)
стабильно пересматриваю 😁👍
Победа,я думал когда вы выпустите новый урок
То что нужно
Мощнейшее видео!
привет, канал классный, я рекомендую тебе сделать визуал студио тёмным Ато зрителю глаза режет, я хочу тоже сделать 2d игру в таком стиле
Да, темная тема норм будет
А это нормально, если агент преимущественно случайно выбирает нижнюю точку для перемещения? А то они все вниз стекаются, не смотря на свободное пространство вокруг
Я как все было готово запустил и выпучил глаза: слизняк вместо того чтобы бегать стал вращаться вокруг Y. Оказалось мне чертов ВизуалСтудио подставил блокировку изменения позиции вместо вращения)
( !!! ) Важное дополнение: нужно добавить пакет AI Navigation к проекту
Добрый вечер, делал все по гайду , но теперь когда агент касается персонажа или персонаж агента происходит тряска агента на некоторое время. Иногда пропадает, иногда нет. Подозреваю что дело в том как меняется позиция агента и что вектор его будущего движения конфликтует с его настоящей позицией(не уверен в этом). Не могли бы подсказать что либо?
Поставь у агента в capsule collider галочку в triggered. Это должно помочь.
слайм же атаковать должен вплотную а пока вроде в коде нет этого
есть конфликт между навмешем и Rigidbody. Когда игрок натыкается на объект Rigidbody, он его толкает и Ригдбоди начинает скользить в направление толчка, агент начинает его перемещать в другую сторону. т.е. кадр 1 - ригид боди сдвинул слайм на 5 пикселей вниз, агент подвинул на 2 пикселя вверх. итого слайм опустился на 3 пикселя вниз. кадр 2: ригид сдвинул на 2 пикселя вниз, агент поднял на 5 пикселей вверх. итого слайм поднялся на 3 пикселя вверх итд..
чтобы убрать тряску, надо отключить физику у ригидБади. для этого переключить BodyType в static у компонента RigidBody
Столкнулся с такой проблемой.
Сам решил, но залип ненадолго.
Может кто то же попадется.
в проекте файлик PlayerInputSistem... ну тот где управление настраиваем... решил перекинуть в папку с плеером... ну типа сущности связанные искать будет проще.
повылетало миллион(28 вроде) ошибок весь лог красный...хз ниче непонятно.
в общем дошло что файлик при перекидывание создает в новой папке еще один скрипт PlayerInputAction ... а старый такой же там где лежал файл остается.
юнька начинает ругаться что два одинаковых файла в проекта...
удалил старый и все вроде заработало
Было дело)
Что делать если в package manager нет al navigation?
А версия unity как у меня?
@@TinyGamesUnity нет, у меня 21 года
Может по другому как то называется?
Приветствую, отличный гайд но возникла проблема слайм вместо того чтобы менять позицию разворачивается. Не могу понять где ошибка.😭😭😭
Помогите!!!!!
Подскажите как сделать так, что бы во время броженния персонажа он переодически останавливался и стоял, а потом снова начинал движение
А у не только у меня SetDestination() не работает( ошибки не выдает, объект тупо не двигается )
Прочитал комментарии но так и не нашел. У меня после движения на стрелочках персонаж продолжает двигаться в эту сторону даже если кнопка уже не зажата
Спасибо большое за урок!
А подойдет ли эта система для платформеров?
Если адаптировать, то почему нет)
Возник вопрос про запекание. Как быть с динамическими препятствиями? Например игрок срубил дерево и там можно ходить или ворота закрылись и пройти нельзя?
Мы это сделаем в ближайших видео.
Пол часа искал, почему слайм не двигается, оказалось вместо знака больше поставил знак меньше.)
Бывает)
Такой вопрос, после столкновения агента с игроком, агент продолжает движение но уже постоянно дергаясь (как будто произошел рассинхрон с герцовкой) как это исправить?
Есть подозрениt, что есть конфликт между навмешем и Rigidbody. Когда игрок натыкается на объект Rigidbody, он его толкает и Ригдбоди начинает скользить в направление толчка, агент начинает его перемещать в другую сторону. т.е. кадр 1 - ригид боди сдвинул слайм на 5 пикселей вниз, агент подвинул на 2 пикселя вверх. итого слайм опустился на 3 пикселя вниз. кадр 2: ригид сдвинул на 2 пикселя вниз, агент поднял на 5 пикселей вверх. итого слайм поднялся на 3 пикселя вверх итд.
поставил в роигидбади тип static перестало дергаться.. так как у слайма перестала считаться физика
А как сделать, чтоб когда враг достигал целевой точки он как бы переключал анимацию, ну или хотя бы Debug.Log()
Ты хочешь сделать анимацию покоя? Чтобы когда враг достигал точки, то он просто стоял, а не бежал на месте. У агента навмеша есть velocity ,если я правильно помню. Вот проверяй, что он не равен Vector3.zero. Мы это реализуем в будущих видео.
Огромное спасибо! Видео жду, но и самому интересно реализовать@@TinyGamesUnity
Привет, у мен я такая проблема. Почему слайм вращается по оси y и никуда не идет?( у меня меняется rotation, хотя я уже 4 раза проверил что я написал SetDestination())
Я также выводил roamPosition в консоль и все по идее должно быть правильно
В RoamingDistanceMin поставь значение 3f, a не 1f. Мне это помогло.
Только теперь у меня другая проблема. Слам не двигается вообще@@fsa0185
А у тебя slime двигался? Я поменял значение переменной, но SetDestination() не работает все равно(@@fsa0185
Agulat speed на 0 ставить надо в Nav Mesh слайма
Здравствуйте. Благодарю за уроки.
У меня проблема: на запекается область. Не появляется область подсвеченная синим. Может уже кто задавал такой вопрос? Просмотрел здесь в комментах - не нашёл...
возможно ты просто не включил её. помимо того что бы справа сверху нажать на кнопку(как автор показывал в видео) надо ещё галочку поставить на "Show NavMesh", это находится в окне "AI Navigation", оно появляется в сцене когда в целом навмэш добавляем к игре. Такое справа снизу окошко с тёмным фоном
Убрали нормализ и не думаю что повысили производительность т.к. подключена библиотека inputactions и делает тоже самое и возможно намного больше всего.
Привет, возникла проблема - когда запускаю игру, в окне game слайма не видно, но в scene все работает хорошо. Заранее спасибо за ответ!
нашли решение проблемы?
@@ndexy да)
@@kapushka3271 как?
@@ndexy уже если честно не помню, но точно была проблема со слоями и менял их
@@ndexy Я нашёл возможное решение. Необходимо в скрипте, который прикреплён к врагу у которого есть компонент "NavMeshAgent" запретить вращаться и изменять положение по оси Z. th-cam.com/video/otbicStkk5A/w-d-xo.html
Помогите! Застрял на этом уроке. Слайм пропадает, в настройке капсул колайдер появился восклицательный знак и ошибка: "The collider did not create any collision shapes as they all failed verification, This could be because they were deemed too small or the vertices were too close. Vertices can also become close under certain rotations or very small scaling." Когда я отключаю NavMeshAgent слайм появляется, а когда включаю пропадает
Буду очень благодарен
решил проблему?
@@nesergey13 ага
Приветствую.
Не подскажете, как удалось решить проблему?
Та же самая история, не знаю как пофиксить...
Привет, есть проблемка, я вот ничего не понимаю в этой теме, но каким-то боком дополз до этого момента. В общем проблемма в том что ошибок в коде нету, ни кто ни на кого не ругается, всё нормально, но просто слайм не двигается, я в начале ещё обрадовался, так как у вас он тоже не двигался, но вы поменяли Idle на Roaming и у вас он заработал, а у меня нет, никаких ошибок нету, а по скольку я ничего толком не понимаю в кодах, и в Юнити также. В итоге не могу понять откуда начинать искать проблему, типо если бы в коде подчеркнуло что-то, я бы хоть знал связанную с чем проблему искать, а так я вообще не знаю куда думать, если кто-то знает с чем такое может быть связанно я бы не отказался получить совет, или напутствие, а пока возьму гугл за ручку и буду бесить его)
В общем... отбой, но в чём была проблема я так и не понял, пока думал и гуглил в чём может быть проблема, я пересобрал слайма с нуля(полностью удалил все связанные с ним папки, спрайты и его свойства) код не трогал его оставил, и он почему-то заработал. Вроде и круто, но обидно что не получил опыта в понимании из-за чего такое могло произойти, так сказать моба убил, а система опыт на защитала(((
Даже ошибок никаких
Слизень не двигается хотя переменная romaingTimerMax двигается в низ и уходит в минус
public class MobMoving : MonoBehaviour
{
[SerializeField] private State startingState;
[SerializeField] private float roamingDistanceMax = 7f;
[SerializeField] private float roamingDistanceMin = 3f;
[SerializeField] private float roamingTimerMax = 2f;
private NavMeshAgent navMeshAgent;
private State state;
private float roamingTime;
private Vector3 roamingPosition;
private Vector3 startingPosition;
private enum State
{
Idle,
Roaming
}
private void Awake()
{
navMeshAgent = GetComponent();
navMeshAgent.updateRotation = false;
navMeshAgent.updateUpAxis = false;
state = startingState;
}
private void Start()
{
startingPosition = transform.position;
}
private void Update()
{
switch (state)
{
case State.Idle:
break;
case State.Roaming:
roamingTimerMax -= Time.deltaTime;
if (roamingTime < 0)
{
Roaming();
roamingTime = roamingTimerMax;
}
break;
}
}
private void Roaming()
{
roamingPosition = GetRoamingPosition();
navMeshAgent.SetDestination(roamingPosition);
}
private Vector3 GetRoamingPosition()
{
return startingPosition + Utils.GetRandomDir() * UnityEngine.Random.Range(roamingDistanceMin, roamingDistanceMax);
}
}
"SetDestination" can only be called on an active agent that has been placed on a NavMesh.
UnityEngine.AI.NavMeshAgent:SetDestination (UnityEngine.Vector3)
AiMove:Roaming () (at Assets/Scripts/AiMove.cs:44)
AiMove:Update () (at Assets/Scripts/AiMove.cs:36)
Что делать при такой ошибке подскажите пожалуйста?
: SceneManager.SetActiveScene failed; the internal DontDestroyOnLoad scene cannot be set active.
UnityEngine.SceneManagement.SceneManager.SetActiveScene (UnityEngine.SceneManagement.Scene scene) (at :0)
UnityEditor.SceneHierarchy.TreeViewItemDoubleClicked (System.Int32 instanceID) (at :0)
UnityEditor.IMGUI.Controls.TreeViewController.HandleUnusedMouseEventsForItem (UnityEngine.Rect rect,
и просто удалился мой игрок и слайм
почему у меня Slime не двигается вместе с SlimeVisual? помогите кто то пж