По моему это лучший тутор для новичков, в твоем плейлисте есть все необходимое для базы, не представляешь как я благодарен, ведь именно найдя твои видосы процесс пошел куда быстрее!!))
Спасибо большое, очень полезный и очень интересный урок! Прям реально без преувеличения, очень хорошие объяснения, мало кто так подробно останавливается на отдельных важных моментах. Спасибо)
Ребят, у кого прыжок все еще бесконечный - внимательно посмотрите на layer. он везде по default должен быть, кроме объекта Ground я на этом стопорилась и искала баги в коде да прибудет с вами геймдев сила ))
@@NoobGameDev Да, во всем разобрался. Оказывается я какие-то строки в скриптах я пропускал, поэтому не работало прыжок. Спасибо большое, буду дальше смотреть твои видео
@@NoobGameDev Можно было бы записать урок как прицепить камеру к персонажу или как создавать уровни и врагов. Надеюсь в будущем у вас будет такое. Желаю тебе удачи)
@@Madl_Madl Есть такое в мыслях) В идеале, я планировал писать игру и после добавления в неё какой-то "возможности", делать на эту тему урок) Чтобы и самому не забыть и с людьми поделиться. Т.е. на выходе должна получиться игра из данных уроков... Или уроки из игры) Только из-за этих видео, время создания самой игры увеличится раз в 10-15, видимо... В общем, задумка такая. Спасибо за поддержку!) Будем делать дальше)
@@NoobGameDev Это правильно, чтобы потом не забыть что в прошлом изучать. А так то это полезно не только тебе, но и простым людям которые в этом интересуются. Но все равно желаю тебе удачи, буду дальше смотреть твои видео)
Дело вкуса. Мне наоборот, нравится когда побыстрее. Если что-то не разглядел, ставлю скорость на 0.5 и пересматриваю. Так удобнее: пробегаться по общей информации и заострять внимание на важной, а то недавно смотрел урок по блендеру, семь минут кулстори от автора, чтоб показать где включается одна галочка. И вроде бы спасибо ему, смог закрыть свой вопрос, но чёт выбесил))
Привет! Отличные уроки! Объясняешь такие мелкие детали, которые даже на форумах толком не найти. И уж тем более не сравнить со всякими "онлайн-университетами", в один из которых я вляпался по незнанию. Спасибо :)
Привет, а не подскажешь какой университет? Сейчас сам раздумываю пойти на курсы по геймдизайну. Но столкнулся с такой забавной темой... Noob Game Dev объясняет в разы лучше, чем преподаватель одного из университетов, записи уроков которого у меня есть. Тут все структурировано, четко и без лишней воды. За 5-10 мину объясняет то, на что тому преподавателю понадобилось полтора часа. Вот теперь не уверен...
@@Jetbullet777 , дабы избежать рекламы, намекну - "коробка навыков". Касательно обучения - если есть деньги (это главное), если нужен порядок (систематизация) обучения, если нужен диплом, если нужны преподаватели - смело приобретай курс. Но. Почти всё, что я знаю, в конечном итоге получено из UA-cam. Преподаватели - среднячок, один норм попался ("вот тут и тут скрипт поправить, тут отлично сделано, тут посмотри, как лучше сделать"), второй откровенный раздолбай ("а ну норм идём дальше"). Систематизация обучения есть, но в ней много дыр для перфекционистов. И пока неясно, где и как пригодится упомянутый диплом. В IT-компаниях его не жалуют, это точно.
В методе addforce надо добавлять forcemode.impuls и делать проверку на velocity по вертикали, чтоб она была меньше скажем 0,1f тогда не будет даблджампа
@@blackmercy-il9me Я знаю (( Я не Сакутин, чтобы ревьюшить код сеньёров... Мой уровень довольно любительский... Я никогда себя не позиционировал, как профи, не преподносил свои видео, как истину в первой инстанции, и уж тем более никогда не продавал данные уроки, обещая что люди после них смогут работать в крупных компаниях) Потому и название у канала такое) Изначально это всё планировалось, как заметки для себя, чтобы не забыть, что и как я сделал в проекте... Поэтому считаю, что такие косяки в коде в моём случае допустимы (по крайней мере, на данном этапе развития канала, да, и меня, как программиста-любителя). Но могу Вам обещать, что я буду стараться выйти на адекватный уровень, так как знаю, что мои знания достаточно далеки от идеала и мой код далёк от приемлемого уровня. Каждый день я узнаю, что-то новое и всё больше замечаю пробелов в различных областях. Спасибо Вам за этот "шлепок по заднице", уверен, он меня подстегнёт к детальному изучению основ) Так же, если Вас не затруднит, то буду благодарен, если дадите несколько ссылок на годных авторов или на какие-либо ресурсы, которые смогут подтянуть меня в кодинге на C# под Unity!)
Автор! Чтобы AddForce работал нормально нужно дописать в скобках ForceMode2D.Impulse т.е.: rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); и тогда он нормально прыгает при обычных значениях jumpForce
1)Вроде всё нормально,но прыжок получается слишком резким(ForceMode2D.Impulse вообще отключает прыжок по каким-то причинам) 2)Есть ли какая-нибудь документация с разбором методов и классов unity?Просто новичок в этой теме,раньше писал чисто на C#,а ,перейдя сюда,словно очутился в другой вселенной. 3)Неописуемо рад,что наткнулся на твой канал,один из лучших по обучению,а таких мало.Вот что мне нравится - постепенно,структурировано и подмечаешь все детали,спасибо!
1. При использовании AddForce нужно значительно увеличить силу прыжка (jumpForce) так как "velocity" задаёт конечную величину и направление ускорения объекта, а AddForce прикладывает силу к объекту, которая должна задать ему такой импульс, который и силу гравитации преодолеет и ускорение задаст... Поэтому при использовании AddForce и маленьком значении величины jumpForce, может казаться, что прыжка не происходит. Так же у компонента Rigidbody2D, есть такое свойство, как "Gravity Scale" (можно и в Инспекторе изменять), которое является множителем гравитации. При резком прыжке попробуйте поиграться с этим значением (увеличьте раза в 1.5 - 2) 2. Есть официальная документация, на которую все в основном и ссылаются: docs.unity3d.com/Manual/index.html Она довольно обширная, но очень малая её часть переведена на русский, что вызывает сложность при её использовании. А, к сожалению, каналов или ресурсов с хорошим объяснением и широким спектром обозреваемых возможностей Unity, я не встречал. Так же больше всего материала по Unity связано именно с разработкой в 3D. 3. Большое спасибо, рад, что мой контент пришёлся Вам по вкусу))
@@NoobGameDev , спасибо. Касательно первого, изменение гравитации сказывается на скорость падения - да,а вверх прыжок происходит,как будто телепортация. AddForce сам по себе работает,но при добавлении аргумента ForceMode2D.Impulse - прыжок не работает,вот в чем проблема.Из-за этого я не могу оценить влияние данного параметра,может именно он позволит плавнее выполнять прыжок. rb.AddForce(Vector2.up * jumpforce(3000 стоит)); - работает,но телепортируется вверх rb.AddForce(Vector2.up * jumpforce(3000 и более),ForceMode2D.Impulse); - не работает вовсе
при добавлении Physics Material 2D персонаж, как бы это странно не звучало, перестал останавливаться, то есть даже при отпущенной кнопке движения продолжал двигаться. исправил пока что увеличением Linear Drag, дальше будем посмотреть
У меня вечная проблема с вашими уроками. Вроде логически код у вас верен. Но юнити не принимает его вообще. Что с хождением(исправила потом самостоятельно), что с прыжками. Я пытаюсь в дебри не заходить и остановилась на самом начале - до 0:53. И персонаж не прыгает. Просто не реагирует никаким боком.
Может, Вам мой метод преподнесения информации не подходит... Попробуйте ещё кого-нибудь из авторов посмотреть, я и сам всегда ищу, как минимум две точки зрения на решение проблемы. Но если хотите - можем попробовать разобраться, что не так) Скиньте в комментарий (или в vk.com/evgen_orlov ) код, с которым Вы сейчас мучаетесь. И скажите, что именно Вы исправляли в "ходьбе", чтобы код заработал так, как Вы хотели?
На самом деле я слышал это в нескольких уроках на данную тему... Потом попробовал сам и мне это значение тоже понравилось (похоже на большинство динамичных платформеров). Насколько это истина я не знаю и точного источника, к сожалению, сказать не могу)
У меня персонаж прыгает от стены , объект для определения на стену не залазит, радиус в скрипте а на объекте равны, но on Ground у стены равняется true
Скорей всего, радиус проверки земли выходит за границы коллайдера перса. Другими словами шире, чем перс. Это от части моя вина, что запутанно объяснил... Но попробуйте дописать эти строки перед последней фигурной скобкой " } " в скрипте: private void OnDrawGizmos() { Gizmos.color = Color.red; Gizmos.DrawWireSphere(GroundCheck.position, GroundcheckRadius); } В результате появится красная полая сфера, которая будет истинным радиусом проверки (ориентируйтесь на неё) и изменяйте радиус через Инспектор (GroundcheckRadius) таким образом, чтобы упёршись персом в стену, данная сфера не доставала до стены. Если будет непонятно или если я не правильно понял суть вопроса, то можете зайти к нам на Дискорд сервер (ссылка есть в шапке канала) - там проще объяснить и показать)
для тех, кто использует этот код для 3D public bool onGround = true; public LayerMask Ground; public Transform GroundCheck; public float GroundCheckRadius; void CheckingGround() { onGround = Physics.CheckSphere(GroundCheck.position, GroundCheckRadius, Ground); }
Блин, чукак ты гений! Спасибо тебе большое! У меня именно эта ситуация, давно была проблема с мультипрыжком, всё откладывал её решения уже не в первом своём мини проекте, никак не мог найти нужного решения на просторах ютуба, но вот посмотрел это видео (хотя у автора много интересных и познавательных видео, спасибо ему за это), всё логично и должно работать, применил у себя, но облом, не зря я листал столько комментов дабы наткнуться на тебя)
после того как написала код для чекера-пустышки в плейере , мой перс перестал прыгать , вроде все написала правильно , нигде нету ошибок , он по просту не прыгает . Помогите
void ChekingGround() { OnGround = Physics2D.OverlapCircle(GroundCheck.position, checkRadius, LayerMask.GetMask("Ground")); } Попробуй написать код так, у меня получилось
Я не уверен но мне кажется проверка касания усложнена. Почему не сделать через OnCollisionEnter() или OnTriggerEnter() ? Серия видео конечно зачетная .
Спасибо, приятно) Можно сделать и так, но в таком случае, персонаж будет думать, что он на земле даже если он головой или любой другой частью коллайдера коснётся платформы. Или, например, встанет около стены (со слоем или триггером типа ground) и сможет прыгать, как и до проверки земли. Поэтому именно для проверки "на земле ли стоит перс" подходит либо доп. объект (GroundCheck), либо Raycast. По крайней мере, лично я так считаю)
@@YmeUla Ну, тут, как говорится "хозяин - барин". Конечно, можно и так. Можно и управление вынести в отдельный класс и прыжок, и отражение спрайтов. В будущем я так, вероятнее всего, и переделаю +/- , чтобы можно было прикрутить одно и то же и для перса и для enemy, но для уроков (особенно начальных) мне показалось, что так будет проще и понятнее) Как лучше сделать, буду разбираться после добавления всех основных механик)
@@bymajkakryta1474 Какая именно? Если стена имеет слой земли и когда перс подходит к ней вплотную, то может совершать кучу прыжков? Если так, то нужно уменьшить радиус GroundCheck, чтобы он не выходил за пределы коллайдера перса, другими словами он должен быть немного уже персонажа (не должен выходить за его границы, чтобы не пересекаться со стеной)
Делал прыжок через AddForce. Помещая метод прыжка в Update, персонаж на огромные расстояния одним прыжком улетал(Со значением прыжка 4 улетал до 46 унитов вверх). Помещая метод в Fixed Update прыжок стал адекватным, но не равномерным и каждый третий/четвёртый выходит будто с умноженной высотой. Не могу понять в чём проблема.
Привет, не нашел твой телеграм, напиши пожалуйста свой, у меня одна МЕГА проблема, когда увидишь у тебя тоже глаза на выкате будут, как мне кажется, это по юнити
Можно ли сделать прыжок векторным? Типо не импульс будет его толкать, а он будет более "картонным". Классический вариарнт с импульсом может очень много багов образовать, например если очень быстро в прыжке допрыгнуть до земли и прыгнуть еще раз значения приумножатся и прыжок будет очень большим)
Ну, как по мне, так самым простым, настраиваемым и стабильным вариантом является задание скорости. Т.е. что-то типа: rb.velocity = new Vector2(rb.velocity.x, Y); где вместо Y указывается скорость (типа сила) прыжка. Вполне себе рабочий и удобный вариант) Но стоит учитывать, что в таком случае скорость с которой перс падает и скорость для прыжка суммироваться не будут. Другими словами персонаж может падать с небоскрёба, а перед землёй, нажав прыжок, подпрыгнет вверх и мягонько приземлится... Если это позволяет геймплей, то всё ок))
Что делать если на 0:51 пишет: Assets\movePlayer.cs(32,13): error CS0103: The name ‘onGround’ does not exist in the current context.? Помогите пожалуйста.
Пишет, что Вы не объявили переменную 'onGround', но при этом пытаетесь её использовать, т.е. пропустили строку: private bool onGround = false; Добавьте её где-нибудь вне метода, там где другие переменные объявляются и должно заработать)
Проблема такая: при соединении jump, к например idle, только один переход к обоим анимациям могу сделать и все( Пытался сделать переход через any state, а там тоже такой прикол с одним переходом. Вроде все как у тебя
У меня была такая же проблема, а заключается она в косяке работы определённой версии Unity Полазал на форумах и нашёл вот это: Problems with States and Transitions in the Animator и Unable to make State transitions in Animator (Это названия статей),(если интересно там на английском челики сообщили о этой проблеме). Самих решений 2. Первое взять и установить новую версию Unity я поставил 2021.2.17f1 и она работает. (2020.3.32f1 - не работала) Второй вариант (For people not looking to change Unity version we used a workaround : put the inspector in Debug Mode and then right click works as intended.) - Перевод . Для тех, кто не хочет менять версию Unity, мы использовали обходной путь: переведите инспектор в режим отладки, а затем щелкните правой кнопкой мыши, чтобы все работало по назначению. Ну вообщем вот так может что-то поможет
0:51 - скрин кода вопрос: что делать если unity говорит:The type or namespace name 'Vector2' could not be found (are you missing a using directive or an assembly reference?) вместо Вектора там ещё и другие переменные.
Обычно при создании нового скрипта через Unity, к нему сразу подключаются самые используемые (а порой и необходимые) директивы: using System.Collections; using System.Collections.Generic; using UnityEngine; Они прописываются в самом начале, перед описанием класса. Думаю, что Вы их просто удали) Верните хотя бы using UnityEngine; Хотя лучше бы все три. А после того, как закончите писать скрипты, можно будет неиспользуемые (они будут иметь более тёмный вид) удалить.
@@NoobGameDev Я уже даавно решил эту ошибку, вы оказались правы, посмотрел на ваш код и всё понял, видео классное, завтра буду смотреть следующие части. 👍
Здравствуйте, в новой версии Unity не смог найти physics material 2d. Обычный есть, а 2d нет. Может вы знаете другой способ как убрать прилипания или как исправить проблему с physics material 3d?
Здравствуйте, сделал как все надо, только вот запускаю. Персонаж запускает анимацию и застыват в анимации прыжка и двигается так же, + к этому и пробел не тыкается. В чем может быть проблема? Цикл на jump еще застрял
Очень похоже на то, что перс не "видит" землю... И считает, что он постоянно падает, ну, поэтому и не прыгает соответственно) Попробуйте увеличить размер коллайдера объекта GroundCheck. Или ещё лучше, сперва попробуйте дописать эту строку в функцию Start (как в коде под видео): GroundCheckRadius = GroundCheck.GetComponent().radius; Она автоматически будет вписывать радиус коллайдера в переменную GroundCheckRadius. А так же перепроверьте выбрали ли Вы слой Ground в поле Ground в Инспекторе и находится ли платформа, на которой стоит перс, на слое Ground.
@@NoobGameDev Спасибо огромное" Проблема была в слоях, не прикрепил. Теперь проблема осталась другая, как найти physics material 2D? у меня отображается просто physics material
Привет, я на моменте где добавил onGround и он появился в inspector но когда запускаю и 2 прыжок все равно работает + все время стоит галочка на onGround где допускаю ошибку ?
Здравствуйте) В коде ничего необычного не вижу. Скорей всего, у вас либо выключен компонент Animator (в Инспекторе), либо сам объект находится в неактивном состоянии, либо у компонента Animator нет ссылки на AnimatorController. Но думаю, что без сриншотов будет сложновато объяснить. Посетите наш Дискорд сервер (ссылка есть в шапке канала). Можете заскринить этот комментарий и попросить помощи там. Со скриншотами всяко понятнее и быстрее получится)
Здравствуйте, нужна помощь,выдает ошибку : 'Rigidbody2D' does not contain a definition for 'AddForse' and no accessible extension method 'AddForse' accepting a first argument of type 'RigidBody2D' could be found
Всё верно) Метода "AddForse" не существует, есть метод "AddForce"... (вместо буквы "s" буква "c") Обычно (если всё правильно настроено), то когда Вы начинаете писать имя метода, то VS предлагает варианты из списка доступных и похожих. А значит, если Вам VS такого списка не предлагает, то советую разобраться с настройками и посмотреть вот это вот видео: ua-cam.com/video/w8J-srV9uzw/v-deo.html Это поможет Вам в дальнейшем не допускать подобных опечаток, да, и новые методы можете узнать)
Здравствуйте, делал все по вашему видео (посмотрел и написал код из: 2, 3 и 4 видео). А сейчас я немогу вставить этот скрипт на персонажа. Выдаёт ошибку вроде этой: - Can't add script Please fix compile errors before creating new script components. Прошу, пожалуйста, помогите!!!
Сорри, поздно увидел сообщение... Проблема в том, что Вы пытаетесь "повесить" скрипт в котором есть синтаксические ошибки. Если проблема актуальна, то перепроверьте новый скрипт (возможно, где-то пропущен символ ";" ) VisualStudio такое должен подчёркивать. А если он этого не делает, то есть подозрения, что он у Вас и с Unity не связан... Поэтому ещё рекомендую глянуть вот это видео (лишним точно не будет): ua-cam.com/video/w8J-srV9uzw/v-deo.html
@@NoobGameDev Хорошо, спасибо, проверю, но хочу уточнить что я работаю на юните которая идет на 32битную windows 7 (то есть Unity 5.6.7f1). И VisualStudio у меня нет. Я подключил к Unity Visual Studio Code (и скачал все что связано с C# и с самим Unity)
а что делать у меня кргда я написал скрипт скрипт остался стандартным а в редактаре скрипта он тот который я написал и когда я добавляю его на персонажа он ничего не делает
Стандартный - это имеется ввиду пустой шаблон, где всего два пустых метода, Start и Update? И если в IDE он был изменён и сохранён, то почему ты решил, что он не изменился? Unity в консоли какие-то ошибки выдаёт? Или при добавлении скрипта к персонажу?
Сложный вопрос... Если Вы новичок, то априори не сможете написать код самостоятельно, - Вы, в любом случае будете сначала переписывать примеры, потом поймёте как они работают, а потом придёт осознание того, что нужно поменять, чтобы что-то работало так, как Вам хочется и вот уже после этого сможете написать свой код опираясь на свой опыт. Если у Вас есть свободное время и желание разобраться в том, что Вы делаете, то, конечно же, пробуйте писать код самостоятельно - это полезнее и интереснее, чем бездумно переписывать... Но! Я так же считаю, что иногда можно взять и готовый рабочий скрипт, чтобы сэкономить время и сократить кол-во ошибок (но это уже когда будете примерно понимать, как этот скрипт работает). В общем и целом: - если новичок - переписывать примеры и гуглить, какое слово в коде что значит; - почувствовал в себе уверенность - пытаться изменять чужие примеры под свои нужды; - стал ещё круче - изучать, создавать и применять новые (свои) методы под старые задачи; - почувствовал себя программистом - к этому времени и сам разберёшься, что дальше делать)
Все прекрасно работает, но есть один момент, не подскажите как можно его решить? У меня анимация прыжка состоит как бы из трёх этапов, присед - прыжок - приземление (присед после прыжка), так вот, после нажатия пробела, персонаж приседает уже в воздухе, а приземление совсем не проигрывается, так как анимация прыжка прерывается после пересечения колайдера GroundCheck с объектами слоя Ground, можно это как-то пофиксить? И еще один момент, можно каким-то обраpом регулировать длину прыжка?
Я с конца начну) О контролируемом прыжке есть видео (буквально следующий урок, 5-й), но в нём происходит контроль времени увеличения силы прыжка... Т.е. он будет прыгать дальше за счёт того, что прыгает выше. Есть так же видео об ускорении (беге, 10-й урок), в нём увеличение длины прыжка происходит за счёт увеличения скорости движения во время прыжка. Посмотрите оба видео, может, их комбинация даст, то, что Вам нужно. А вот с прыжком всё не так однозначно... Если Вы хотите анимацию перед прыжком, то придётся делать задержку на время проигрывания анимации (т.е. нажали клавишу прыжка, а перс прыгнул через ~0.5 сек.). А при приземлении, нужно будет на время проигрывания анимации отключать управление героем (чтобы, например, при зажатой клавише управления, анимация не переходила резко из прыжка в ходьбу, или перс не перемещался влево вправо во время проигрывании анимации приземления...) Получится перед прыжком 0.5 сек., после те же 0.5 сек... и уже секунда (примерно) задержки. А эти все моменты очень ощущаются в игре. Можно ускорить анимацию, но тогда она становится почти не заметной... Если сделать всё, что я тут предложил, то получится примерно так: ua-cam.com/video/_unKY_IqiAQ/v-deo.html
что делать если выдаёт ошибку Assets\Scripts\Player.cs(43,25): error CS0117: 'Physics2D' does not contain a definition for 'OverLapCircle' помогите! прошу!
Если проблема ещё актуально, то C# чувствителен к регистру букв. В данном случае в "OverLapCircle" написана "L", а должна быть "l", т.е. вот так: "OverlapCircle"
UnassignedReferenceException: The variable GroundCheck of PlayerMovement has not been assigned. You probably need to assign the GroundCheck variable of the PlayerMovement script in the inspector. Что делать?
Там же всё написано. В инспекторе не выбрали Граунд чек, видимо в ячейку забыли перетащить тот объект, который под персонажем создавался. Это было на моменте 4:14
Хорошо объясняешь! Но я правда не могу разобраться - у меня игрок прыгает с какой-то периодичностью чтоли. Грубо говоря, не всегда срабатывает пробел. В апдейте функция джамп есть...
Здравствуйте, такой вопрос. Почему при нажатии кнопки пробел персонаж может улетать в космос? То есть он не падает обратно, а просто начинает подниматься по оси у до бесконечности.
Приветствую) А сколько Вы его ждали с орбиты? В теории - это может произойти при Gravity Scale = 0 (в Инспекторе в Rigidbody), либо при ошибке в коде (если, к примеру ускорение персу придаётся не один раз при нажатии кнопки, а каждый кадр). Но, скорей всего, если вы делали по уроку, то для условий вашей сцены, у вас слишком большое значение JumpForce. Как Вы, кстати, делали (через velocity или AddForce)? Попробуйте его запустить к Зевсу и пойти попить чаю, посмотреть какой-нибудь видосик, и если минут через 10-15 значения по Y не начнут уменьшаться, то есть большая вероятность, что ошибка в коде. Если же цифры начнут возвращаться к нулю, то проблема в сильно большем, чем нужно значении силы прыжка)
Это значит, что перс постоянно "видит" землю, а это, скорей всего означает, что у Вас слишком большое значение в поле GroundCheckRadius. Значение должно быть равным радиусу коллайдера объекта GroundCheck. Так же чтобы не проверять это при каждом изменении можно в ф-ю Start дописать эту строку: GroundCheckRadius = GroundCheck.GetComponent().radius; Она автоматически при запуске игры будет вписывать значение радиуса коллайдера GroundCheck в поле GroundCheckRadius
@@semzero277 Тогда такое ещё предположение: в Инспекторе в поле Ground должны быть выбраны только слои, на которых может стоять перс (например Ground, Platform). А если там будет выбран слой, на котором находится сам персонаж (Player) или все слои (Everything), то как раз и будет такое поведение. Или если сам объект GroundCheck находится на слое Ground - он должен быть на том же слое, что и персонаж (например Player) или на каком-нибудь нейтральном (например Default) UPD: ещё одна мысль. Точно ли GroundCheck дочерний для персонажа объект? Должна быть такая структура: Player: - GroundCheck Т.е. GroundCheck нужно перетащить В персонажа. Для таких вопросов скриншоты очень хорошо подходят, поэтому если есть Дискорд, то присоединяйся к серверу, там гораздо быстрее и проще можно помочь: discord.gg/AHpWFBAJJr
Большое спосибо за видео, но только персонаж у меня тоже не прыгал. Наверное из-за того, что слой GroundCheck у меня был чуть выше ног игрока(возможно не я один сделал эту ошибку). Опустив GroundCheck ниже ног, мой персонаж смог запрыгать.
У меня проблема ,не работает анимация . В аниматоре при срабатывании OnGround состояние прыжка мигает(шкала снизу ) В параметрах в аниматоре OnGround работает стабильно скорость анимации менял ,сама анимация из 2 кадров
Нужно проверить переход от прыжка к покою (и к ходьбе). Есть подозрение, что там ошибка типа: в условии onGround = false вместо true. Как раз в таком случае анимация может из покоя быстро переключиться на прыжок и тут же переключиться обратно.
@@t4shok628 Тогда можно попробовать добавить кадров к анимации (любых), чтобы их не 2 было, а скажем 10. И посмотреть, если анимация будет воспроизводиться как надо, то проблема в анимации, а если и с 10-ю кадрами она будет всего лишь "промаргивать" то проблема либо в коде, либо в Аниматоре (что скорее всего). В идеале записать бы видео с проблемой, пощёлкать переходы, код промотать и скинуть мне в ВК или Телегу, что бы не гадать)
у меня почему то персонаж вообще не прыгает(( вот если что код:using UnityEngine; public class MovePlayer : MonoBehaviour { public float speed = 30.0f; public float jumpForce = 350.0f; private Rigidbody2D rb; void Start() { rb = GetComponent(); } void Update() { Jump(); float moveX = Input.GetAxis("Horizontal"); rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime); } void Jump() { if (Input.GetKeyDown(KeyCode.Space)) { rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); } } }
А вы ещё ни одной анимации не делали для персонажа? Там нужен компонент Animator Controller, если не ошибаюсь, то при создании первой анимации, автоматически создаётся контроллер для того объекта которому была создана анимация. Но можно его создать и добавить вручную, почти так же, как и скрипт создавали: правой кнопкой -> Create -> Animator Controller -> можно его переименовать -> и перетащить в поле Controller блока Animator (или нажать на кружок справа от поля и выбрать нужный контроллер)
Использовать public чтоб просто работать в инспекторе так себе идея, есть такая вещь как [SerializeField] стоило сказать это, хотя бы просто сказать и использовать дальше public
Все норм, но не понимаю пару вещей: 1) Когда персонаж упирается в стену его начинает трести. 2) не совсем понял про прыжок, т.е. я поставил гравитацию на 30 (у всех объектов), но падать быстрее он не стал, а идёт обычный прыжок( он занимает много времени и позволяет банихопить) Подскажите как исправить :D
Начну со второго: нужно -30 (минус 30), а то он вообще как на Луне должен скакать) И насколько я знаю, то BHOP - это тема 3D игр (особенно CS, Doom) суть которой перемещаться быстрее при помощи распрыжки. Или имеется ввиду, что персонаж прыгает над землёй? Если да, то нужно уменьшить значение переменной CheckRadius в Инспекторе или коде. А вот с тряской у стены, это не совсем понятно... Происходит быстрое переключение анимаций или небольшое подпрыгивание или наоборот проваливание? Просто звучит знакомо, что-то похожее было у меня, но проблема была в быстром переключении анимаций из-за неправильных условий в переходах в Аниматоре.
вот у меня вопрос, мне не нужен будет прыжок от стен и коллайдер персонажа у меня квадратный, соответственно ему нужна другая проверка земли, иначе он сможет прыгать только из середины блока, как мне сделать нормальный триггер земли, ведь если я попытаюсь увеличить радиус, то он начнёт считать стены за землю и отпрыгивать от них, как сделать триггер либо хитбоксом самого персонажа и сделать отдельный слой для стен, либо сделать как в обучение юнити и добавить разных состояний прыжка и не используя слои. Можете рассказать про 2 этих способа или рассказать про другие варианты ?
Совсем не понял про прыжок из середины блока... ) Данный вариант, на мой взгляд, наиболее универсален. Согласен, что он немного запутан (всё-таки одно из первых видео - буду переделывать), но он прекрасно работает и с квадратными персами и с круглыми, так как это по сути значения не имеет. Есть просто куча способов проверки: 1. Кастами (лучами, лучами похожими на квадрат, круг или произвольный коллайдер) - самый популярный Raycast 2. Областями (кругами, квадратами, коллайдерами, точкой) - популярный OverlapCircle (как в видео) 3. Контактами коллайдеров (через оnTrigger и onCollision, либо при помощи методов getContacts или isTouching) И для всех этих способов можно применять ещё и ContactFilter2D, в котором можно настроить направления нормали для считывания, слой для считывания и пр. Из того, что Вы хотите, больше всего подходит использовать проверку контакта коллайдера вместе с фильтром контактов... Что-то типа этого: _onGround = _mainCollider.isTouching(_contactFilter); Естественно сделав поля для основного коллайдера и фильтра (и настроив его). Каждый из способов имеет свои преимущества и недостатки. Что-то можно просто и наглядно отобразить, что-то из этого остаётся только представлять в голове. В видео что-то среднее)) Я понимаю, что от моего ответа Вам вряд ли стало легче)) Потому что для начинающих слишком много информации, поэтому можете посетить Дискорд сервер (ссылка есть в шапке канала) там можно это всё показать более подробно, а так же посмотреть короткое видео по тому же способу, что и в данном видео, только чуть проще (возможно Вы его и оставите): ua-cam.com/users/shortsM0F-XIxdKIU
в таком случае ты создаешь 2 слоя коллайдеров. 1 - для onGround. Чтобы персонаж ходил. Другой слой - чтобы ты строил стены и.т.п С тайлмапами так же. Создаешь композит коллайдер для персонажа, чтобы он ходил .и.тп. 2й - для стен.
Без кода ошибки непонятно... Вот несколько причин: 1. Ошибка в написании. 2. Вы передаёте в Аниматор не логическое значение (true / false), а, например int. 3. В самом Аниматоре нет логической переменной с таким именем.
У меня такая проблема: при прикосновениях к стенкам, мой персонаж может прыгать как ему вздумается, а сделать слой Wall я не могу, т.к я делаю через tilemap. Как мне это исправить?
Вам нужно сделать поменьше сферу проверки земли, чтобы она не выходила за бока перса. Другими словами сейчас (скорей всего) когда перс упирается в стену, то сфера проверки земли касается стены, поэтому нужно её уменьшить. Вам бы это показать на картинке, но тут нет такой возможности... Поэтому, если не поняли о чём я, то можете зайти к нам в Дискорд (ссылка в шапке канала), там можно наглядно объяснить)
1. Ground - это объект группировки для платформ (т.е. если его развернуть, то в нём будут находиться платформы) 2. Взялся он из первого урока: ua-cam.com/video/T79gLl5Dljg/v-deo.html 3. В него нужно перемещать платформы, как для порядка в Иерархии, так и для того, чтобы иметь возможность группировки платформ и создания для них композитного (одного общего) коллайдера, а также данный объект со всеми дочерними объектами (т.е. платформами) стоит перенести на слой Ground, чтобы иметь возможность определять стоит ли персонаж на земле.
Можете, пожалуйста, объяснить: когда я даю полу слой ground, пол пропадает, но только в режиме конструирования, а если запустить игру, то всё появляется как было. Да, при этом ничего не портится, но приносит это малейшие неудобства, но можно ли это чуть-чуть исправить?
Боюсь, что я с подобным не сталкивался... Единственное, что приходит в голову - это то, что Вы могли отключить видимость Gizmos в окне Scene, а при запуске в окне Game всё видно. Либо что-то не так с осью Z. Например слой земли находится слишком близко к камере или за ней, проверьте этот момент. В 2D хорошей практикой будет следить за тем, что по оси Z объекты были в нуле (кроме камеры). И что-то больше идей нет... Советую, зайти к нам на Дискорд сервер (ссылка есть в шапке канала и описании) и задать данный вопрос в соответствующем канале. В идеале записать видео проблемы. И либо я, либо кто-то из ребят попробуем в этом разобраться)
Вероятнее всего, это всё из-за слишком большого значения переменной "Check Radius". Основную роль играет именно это значение в поле Инспектора (не в коде) Сделайте так: подберите радиус Circle коллайдера у объекта Ground Check (он должен быть немного меньше границ коллайдера перса, чтобы если упереться в стену, то круглый коллайдер для проверки земли её не касался). После того как настроили размер, скопируйте значение радиуса этого зелёного круга и вставьте это значение в поле Check Radius. И попробуйте снова. Если не хотите каждый раз изменять значение Check Radius вручную, то в ф-и Start можете дописать такую строку: GroundCheckRadius = GroundCheck.GetComponent().radius; Она это будет делать автоматически при старте игры. Ах, да! Ещё на всякий случай проверьте, чтобы GroundCheck был дочерним объектом перса (вложенным в него). Т.е. чтобы в Иерархии была такая структура: ПЕРС-| - GroundCheck
@@NoobGameDev Строчка автоматического радиуса - есть, дочерним тоже он является, но не работает, не понимаю в чем проблема, (Сделал так что бы круг не выходил за пределы границ персонажа, но мульти прыжок все равно есть) И еще сделал в анимации все как у вас на видео, персонаж прыгает, бегает (с анимацией из прошлого видео) но в прыжке анимации нет, в аниматоре просто ничего не происходит, не знаю что делать, все настройки onGround точно так же как на видео- а не работает.
@@FINE356 Ну, с анимацией прыжка всё ясно - она и не будет работать, если перс всё время детектит землю. А вот почему это происходит - это надо выяснять... Скинь код сюда или в ВК, я посмотрю на всякий случай...
Ну, единственное, что приходит в голову - это вы записали Flip в анимации... Попробуйте пересоздать новую и следить за этим моментом. Хотя, в таком случае, если во время прыжка понажимать влево-вправо, то он должен поворачиваться... Или перс перестал поворачиваться даже, когда просто ходит? Я бы советовал к нам в Дискорд заглянуть (ссылка есть в шапке канала). Просто там всё наглядно можно показать, понять и вычислить причину.
Этому 2 основные причины: 1. Слишком большое значение JumpForce 2. В коде (в методе Jump) допущена ошибка (многие пишут Input.GetKey(KeyCode.Space), что значит "клавиша ЗАжата", а нужно Input.GetKeyDown(KeyCode.Space), что значит "клавиша была НАжата") Если это не решит Вашу проблему, то советую зайти на наш Дискорд сервер (ссылка есть в шапке канала), там можно и код и скрины скинуть)
Я конечно понимаю, это типа простой способ, все дела, но он же прыгает с рандомной силой, в зависимости от того в какой момент падения снова нажмешь прыжок, он прыгнет или на высоту 2, или на высоту 4, и это непредсказуемый рандом. Это так работает AddForce или я где-то напартачил? P.s. В игре также есть платформы, и если персонаж подпрыгивает на платформу и в этот момент зажат пробел, а над платформой еще платформы, он разгоняется до орбитальных скоростей
у меня проблема, маленькая, есть задержка перед переходом из анимации прыжка в любое другое состояние, с каким то шансом, а в большинстве прыжков переход происходит мгновенно
Скорей всего, в переходах от прыжка к другим анимациям у Вас включен выход из анимации по её завершению (стоит галочка Has Exit Time - уберите её). Ещё могут быть не корректно заданы (или не заданы вовсе) условия перехода (onGround = true / onGround = false). Из-за Has Exit Time анимация сменится только тогда, когда закончится текущая. Т.е. в вашем случае зачастую анимация успевает проигрываться за время вашего прыжка. А иногда (допустим при запрыгивании на платформу) может доигрываться анимация прыжка, когда по логике должна идти анимация покоя, к примеру)
Привет, сделал все как у вас, всё работает, все отлично, но если поиграться персонажем, то бывает, что при прыжке в сторону и приземлении на землю, персонаж улетает в указываемую сторону со скоростью света, троит в стене и проваливается под землю. Это так и должно быть?)
Да, это вполне адекватное поведение - скоро он устанет так быстро бегать и начнёт передвигаться нормально) Ну, а если серьёзно, то я даже не знаю, чем это может быть вызвано... Я его по всякому мучал, но такого эффекта, как Вы описываете ни разу не наблюдал. Перемещение как делали? если через AddForce, то ещё могу понять, он порой непредсказуемо себя может вести... Ну, а так нужно смотреть код, а если там ничего подозрительного, то в сцену тыкать... В идеале бы записать это на видео (чтобы увидеть сие безобразие) и к нам в Дискорд кинуть, может, кто-нибудь из ребят сталкивался)
@@NoobGameDev Поковырялся в Unity, нужно было поставить в риджитбоди параметр Collision Detection на Continuous. Вы вроде это в видео показывали, подвела моя невнимательность)
@@igoryan6175 Так это, вроде в Рывке было, а не в Прыжке... У меня поэтому даже и не мелькнуло. А для рывка есть один нюанс: если будете использовать наклонные поверхности, то если "рвануть" прямо на них - перса вверх отбросит, поэтому, если перс в состоянии рывка и касается земли, то нужно нулить ему скорость. Можете в комментах под видео с Рывком посмотреть, я там это несколько раз расписывал, вроде бы)
@@Omegon1235 CS1061 - Эта ошибка возникает при попытке вызвать несуществующий метод или получить доступ к несуществующему члену класса. Обычно дальше в описании ошибки идут подробности, по которым и вычисляется проблема. Наверное, вы уже её решили... Но в следующий раз присылайте текст ошибки полностью - это ускорит "диагностику")
Обычно такое происходит, если где-то обнуляется скорость, например в управлении: rb.velocity = new Vector2(inputVector.x * speed* Time.deltaTime, 0f); И вот медленное падение будет как раз-таки из-за нуля по Y вот здесь : " 0f);" Там необходимо передавать текущую скорость по Y: rb.velocity = new Vector2(inputVector.x * speed* Time.deltaTime, rb.velocity.y); Тогда падение будет происходить адекватно. Так же нужно иметь ввиду, что если управление сделано через Input.GetAxis, то когда не происходит нажатия на клавиши управления, то и по X и по Y значения будут равны нулю.
Видимо, та же проблема с переходами. Просмотрите их все, у них в настройках не должно быть галочки Has Exit Time. Или анимация зацикливается (по кругу играет). В таком случае в Аниматоре дважды кликните по интересующей Вас анимации и уберите галочку с поля Loop (оно отвечает за зацикливание анимации)
Скорей всего нужно лишь подобрать нужное значение силы прыжка. Попробуйте прыгнуть и подождать минуту, а в это время смотрите за положением перса по Y (в Инспекторе). Если оно будет расти, а потом через какое-то время (10 - 30 сек. - минуту) значение начнёт уменьшаться, то проблема в очень высоком значении силы прыжка - нужно уменьшать (через Инспектор)
Именно резкий, или сильный, высокий? Просто звучит очень знакомо, но, возможно, это не то о чём я подумал. В общем, для начала посмотрите из какой функции у Вас вызывается функция прыжка? Что-то мне подсказывает, что из FixedUpdate... Попробуйте удалить её из FixedUpdate и вызвать через Update (или наоборот). Если это не даст результата, то попробуйте добавить ещё один аргумент (ForceMode2D.Impulse) в метод AddForce, чтобы получилось следующее: rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
Блин, почему-то у меня пробел срабатывает через раз и игрок прыгает не всегда. Не знаете что могло вызвать данную проблему?(Код прыжка такой же как у Вас)
Это один из минусов, когда нажатие клавиши считывается в FixedUpdate. Все нажатия от игрока лучше читать в обычном Update. Типа этого: void Update() { if (Input.GetKeyDown(KeyCode.Space)) { /* вызов метода прыжка */; } }
Т.е. нет картинки Земли? Её не видно ни в окне "Game", ни в окне "Scene"? А если нажимаете "Play", то перс падает и стоит, как бы в воздухе? Если ответы на все вопросы "Да", то 90%, что у вас на объекте отключен компонент "Sprite Renderer". Выберите в Иерархии объект (Землю) и в Испекторе поставьте галочку у компонента "Sprite Renderer"... Помогло? Или я что-то не так понял?
По моему это лучший тутор для новичков, в твоем плейлисте есть все необходимое для базы, не представляешь как я благодарен, ведь именно найдя твои видосы процесс пошел куда быстрее!!))
Спасибо большое, очень полезный и очень интересный урок! Прям реально без преувеличения, очень хорошие объяснения, мало кто так подробно останавливается на отдельных важных моментах. Спасибо)
Отдельное спасибо за то, что выкладываешь код!
Ребят, у кого прыжок все еще бесконечный - внимательно посмотрите на layer. он везде по default должен быть, кроме объекта Ground
я на этом стопорилась и искала баги в коде
да прибудет с вами геймдев сила ))
Спасибо!
прошло много времени с выхода видео, но вы всё ещё отвечаете на комментарии, спасибо вам за туториалы
вы просто лучший, всё работает!!!
спасибо огромное! столько разборов посмотрела
Спасибо.. Спасибо. Буду вас везде рекомендовать, где только можно.
Спас братишка Одинцовский респект!
Вот бы такого учителя в колледже, не то что мои учителя в 3-ем курсе все еще дают уроки по Microsoft World.
Спасибо большое дальше буду смотреть тебя)
Я рад) Видел Вы там писали, что что-то не получалось... Не успел ответить( Разобрались?
@@NoobGameDev Да, во всем разобрался. Оказывается я какие-то строки в скриптах я пропускал, поэтому не работало прыжок. Спасибо большое, буду дальше смотреть твои видео
@@NoobGameDev Можно было бы записать урок как прицепить камеру к персонажу или как создавать уровни и врагов. Надеюсь в будущем у вас будет такое. Желаю тебе удачи)
@@Madl_Madl Есть такое в мыслях) В идеале, я планировал писать игру и после добавления в неё какой-то "возможности", делать на эту тему урок) Чтобы и самому не забыть и с людьми поделиться.
Т.е. на выходе должна получиться игра из данных уроков... Или уроки из игры) Только из-за этих видео, время создания самой игры увеличится раз в 10-15, видимо...
В общем, задумка такая. Спасибо за поддержку!) Будем делать дальше)
@@NoobGameDev Это правильно, чтобы потом не забыть что в прошлом изучать. А так то это полезно не только тебе, но и простым людям которые в этом интересуются. Но все равно желаю тебе удачи, буду дальше смотреть твои видео)
Прикольно спс за урок, но можно в следующий раз для чайников по медленнее и так норм контент такой можно и продлить в минутах я думаю все досмотрят!🤝
Спасибо, учту на будущее!)
Дело вкуса. Мне наоборот, нравится когда побыстрее. Если что-то не разглядел, ставлю скорость на 0.5 и пересматриваю. Так удобнее: пробегаться по общей информации и заострять внимание на важной, а то недавно смотрел урок по блендеру, семь минут кулстори от автора, чтоб показать где включается одна галочка.
И вроде бы спасибо ему, смог закрыть свой вопрос, но чёт выбесил))
Как же хорошо всё и понятно!
Спасибо! Стараемся)
Спасибо была проблема с анимацией прыжка, а теперь я знаю как её решить.
Привет!
Отличные уроки! Объясняешь такие мелкие детали, которые даже на форумах толком не найти.
И уж тем более не сравнить со всякими "онлайн-университетами", в один из которых я вляпался по незнанию.
Спасибо :)
Привет, а не подскажешь какой университет? Сейчас сам раздумываю пойти на курсы по геймдизайну. Но столкнулся с такой забавной темой... Noob Game Dev объясняет в разы лучше, чем преподаватель одного из университетов, записи уроков которого у меня есть. Тут все структурировано, четко и без лишней воды. За 5-10 мину объясняет то, на что тому преподавателю понадобилось полтора часа. Вот теперь не уверен...
@@Jetbullet777 , дабы избежать рекламы, намекну - "коробка навыков".
Касательно обучения - если есть деньги (это главное), если нужен порядок (систематизация) обучения, если нужен диплом, если нужны преподаватели - смело приобретай курс.
Но. Почти всё, что я знаю, в конечном итоге получено из UA-cam. Преподаватели - среднячок, один норм попался ("вот тут и тут скрипт поправить, тут отлично сделано, тут посмотри, как лучше сделать"), второй откровенный раздолбай ("а ну норм идём дальше"). Систематизация обучения есть, но в ней много дыр для перфекционистов. И пока неясно, где и как пригодится упомянутый диплом. В IT-компаниях его не жалуют, это точно.
@@MrSleepydragon диплом, понятно, что никому не нужен. Важнее портфолио и реальные знания. Мне бы с программированием сейчас разобраться…
Все написал правильно. Ошибку не выдает у обоих способов. Прибавил высоту прыжка и все ровно когда я нажимаю на пробел ничего не происходит
В методе addforce надо добавлять forcemode.impuls и делать проверку на velocity по вертикали, чтоб она была меньше скажем 0,1f тогда не будет даблджампа
Можно код?
Уроки замечательные! Я ими иногда пользуюсь, когда делаю платформеры и т.п.
Огромное спасибо за видео, объясняете довольно доходчиво, а самое главное - кратко.))
Спасибо)
@@NoobGameDev видео неплохое, но за такой код и по рукам могут ударить
@@blackmercy-il9me
Я знаю (( Я не Сакутин, чтобы ревьюшить код сеньёров... Мой уровень довольно любительский... Я никогда себя не позиционировал, как профи, не преподносил свои видео, как истину в первой инстанции, и уж тем более никогда не продавал данные уроки, обещая что люди после них смогут работать в крупных компаниях) Потому и название у канала такое) Изначально это всё планировалось, как заметки для себя, чтобы не забыть, что и как я сделал в проекте...
Поэтому считаю, что такие косяки в коде в моём случае допустимы (по крайней мере, на данном этапе развития канала, да, и меня, как программиста-любителя). Но могу Вам обещать, что я буду стараться выйти на адекватный уровень, так как знаю, что мои знания достаточно далеки от идеала и мой код далёк от приемлемого уровня.
Каждый день я узнаю, что-то новое и всё больше замечаю пробелов в различных областях.
Спасибо Вам за этот "шлепок по заднице", уверен, он меня подстегнёт к детальному изучению основ) Так же, если Вас не затруднит, то буду благодарен, если дадите несколько ссылок на годных авторов или на какие-либо ресурсы, которые смогут подтянуть меня в кодинге на C# под Unity!)
Какой способ лучше 1 или 2 в плане правильности и в дальнейших изменениях
Автор! Чтобы AddForce работал нормально нужно дописать в скобках ForceMode2D.Impulse т.е.:
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
и тогда он нормально прыгает при обычных значениях jumpForce
Есть такое. Не помню с какой версии движка прям стало необходимо явно указывать ForceMode. Видео устарело) Надо переделывать 👍
Спасибо, у тебя самый понятный код :)
очень приятно слушать)
Аххах!)) Спасибо) Правда, я не доволен ни звуком, ни дикцией, но буду работать над этим... Надеюсь, будет становиться только лучше)
спасибо большое до тебя у меня не получалось
Большое спасибо! Очень помог!
1)Вроде всё нормально,но прыжок получается слишком резким(ForceMode2D.Impulse вообще отключает прыжок по каким-то причинам)
2)Есть ли какая-нибудь документация с разбором методов и классов unity?Просто новичок в этой теме,раньше писал чисто на C#,а ,перейдя сюда,словно очутился в другой вселенной.
3)Неописуемо рад,что наткнулся на твой канал,один из лучших по обучению,а таких мало.Вот что мне нравится - постепенно,структурировано и подмечаешь все детали,спасибо!
1. При использовании AddForce нужно значительно увеличить силу прыжка (jumpForce) так как "velocity" задаёт конечную величину и направление ускорения объекта, а AddForce прикладывает силу к объекту, которая должна задать ему такой импульс, который и силу гравитации преодолеет и ускорение задаст...
Поэтому при использовании AddForce и маленьком значении величины jumpForce, может казаться, что прыжка не происходит.
Так же у компонента Rigidbody2D, есть такое свойство, как "Gravity Scale" (можно и в Инспекторе изменять), которое является множителем гравитации. При резком прыжке попробуйте поиграться с этим значением (увеличьте раза в 1.5 - 2)
2. Есть официальная документация, на которую все в основном и ссылаются:
docs.unity3d.com/Manual/index.html
Она довольно обширная, но очень малая её часть переведена на русский, что вызывает сложность при её использовании. А, к сожалению, каналов или ресурсов с хорошим объяснением и широким спектром обозреваемых возможностей Unity, я не встречал. Так же больше всего материала по Unity связано именно с разработкой в 3D.
3. Большое спасибо, рад, что мой контент пришёлся Вам по вкусу))
@@NoobGameDev , спасибо.
Касательно первого, изменение гравитации сказывается на скорость падения - да,а вверх прыжок происходит,как будто телепортация.
AddForce сам по себе работает,но при добавлении аргумента ForceMode2D.Impulse - прыжок не работает,вот в чем проблема.Из-за этого я не могу оценить влияние данного параметра,может именно он позволит плавнее выполнять прыжок.
rb.AddForce(Vector2.up * jumpforce(3000 стоит)); - работает,но телепортируется вверх
rb.AddForce(Vector2.up * jumpforce(3000 и более),ForceMode2D.Impulse); - не работает вовсе
при добавлении Physics Material 2D персонаж, как бы это странно не звучало, перестал останавливаться, то есть даже при отпущенной кнопке движения продолжал двигаться. исправил пока что увеличением Linear Drag, дальше будем посмотреть
У меня вечная проблема с вашими уроками. Вроде логически код у вас верен. Но юнити не принимает его вообще. Что с хождением(исправила потом самостоятельно), что с прыжками. Я пытаюсь в дебри не заходить и остановилась на самом начале - до 0:53. И персонаж не прыгает. Просто не реагирует никаким боком.
Может, Вам мой метод преподнесения информации не подходит... Попробуйте ещё кого-нибудь из авторов посмотреть, я и сам всегда ищу, как минимум две точки зрения на решение проблемы.
Но если хотите - можем попробовать разобраться, что не так)
Скиньте в комментарий (или в vk.com/evgen_orlov ) код, с которым Вы сейчас мучаетесь.
И скажите, что именно Вы исправляли в "ходьбе", чтобы код заработал так, как Вы хотели?
а как вы узнали о значении -30 для 2д платформеров? Я бы почитал сайт где об этом написано, наверное много полезного будет.
2:23
На самом деле я слышал это в нескольких уроках на данную тему... Потом попробовал сам и мне это значение тоже понравилось (похоже на большинство динамичных платформеров). Насколько это истина я не знаю и точного источника, к сожалению, сказать не могу)
я чуток пакапался и все понял
теперь все работает
Почему я не могу добавить PhysicMaterial2D, мне предлагает только PhysicMaterial
После нажатия Create выберите пункт 2D, в нём будет PhysicsMaterial2D
Я сделал все как на видео и персонаж прыгает но высота прыжка постоянно разная в зависимости от силы нажатия на пробел как это исправить?
Попробуй в Void Jump в if заменить getkeydown, на getkeyup
У меня персонаж прыгает от стены , объект для определения на стену не залазит, радиус в скрипте а на объекте равны, но on Ground у стены равняется true
Скорей всего, радиус проверки земли выходит за границы коллайдера перса. Другими словами шире, чем перс. Это от части моя вина, что запутанно объяснил... Но попробуйте дописать эти строки перед последней фигурной скобкой " } " в скрипте:
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(GroundCheck.position, GroundcheckRadius);
}
В результате появится красная полая сфера, которая будет истинным радиусом проверки (ориентируйтесь на неё) и изменяйте радиус через Инспектор (GroundcheckRadius) таким образом, чтобы упёршись персом в стену, данная сфера не доставала до стены.
Если будет непонятно или если я не правильно понял суть вопроса, то можете зайти к нам на Дискорд сервер (ссылка есть в шапке канала) - там проще объяснить и показать)
@@NoobGameDev Спасибо
Спасибо большое, но у меня появился баг при котором прыгать бесконечно можно стоя в плотную к стене. Как это можно исправить?
спасибо тебе ты лучший=)
для тех, кто использует этот код для 3D
public bool onGround = true;
public LayerMask Ground;
public Transform GroundCheck;
public float GroundCheckRadius;
void CheckingGround()
{
onGround = Physics.CheckSphere(GroundCheck.position, GroundCheckRadius, Ground);
}
Спасибо тебе большое
@@4orniy468 пожалуйста)
Блин, чукак ты гений! Спасибо тебе большое! У меня именно эта ситуация, давно была проблема с мультипрыжком, всё откладывал её решения уже не в первом своём мини проекте, никак не мог найти нужного решения на просторах ютуба, но вот посмотрел это видео (хотя у автора много интересных и познавательных видео, спасибо ему за это), всё логично и должно работать, применил у себя, но облом, не зря я листал столько комментов дабы наткнуться на тебя)
@@yaLolliHokage желаю удачи с проектом)
Спасибо за урок без говнокода
Спасибо,все работает!
после того как написала код для чекера-пустышки в плейере , мой перс перестал прыгать , вроде все написала правильно , нигде нету ошибок , он по просту не прыгает . Помогите
void ChekingGround()
{
OnGround = Physics2D.OverlapCircle(GroundCheck.position, checkRadius, LayerMask.GetMask("Ground"));
}
Попробуй написать код так, у меня получилось
@@ВасилийМоисеев-ж6у премного благодарна !!
чел ультрагипермегасуперхорош
Я не уверен но мне кажется проверка касания усложнена. Почему не сделать через OnCollisionEnter() или OnTriggerEnter() ?
Серия видео конечно зачетная .
Спасибо, приятно) Можно сделать и так, но в таком случае, персонаж будет думать, что он на земле даже если он головой или любой другой частью коллайдера коснётся платформы. Или, например, встанет около стены (со слоем или триггером типа ground) и сможет прыгать, как и до проверки земли.
Поэтому именно для проверки "на земле ли стоит перс" подходит либо доп. объект (GroundCheck), либо Raycast. По крайней мере, лично я так считаю)
@@NoobGameDev А почему не вынести саму проверку в отдельный скрипт который бы крепился к дочернему объекту(тригеру)
@@YmeUla
Ну, тут, как говорится "хозяин - барин". Конечно, можно и так. Можно и управление вынести в отдельный класс и прыжок, и отражение спрайтов. В будущем я так, вероятнее всего, и переделаю +/- , чтобы можно было прикрутить одно и то же и для перса и для enemy, но для уроков (особенно начальных) мне показалось, что так будет проще и понятнее) Как лучше сделать, буду разбираться после добавления всех основных механик)
@@NoobGameDev , у меня собственно и присутствует данная проблема, хотя метод такой же как и у вас, не знаете почему такое возможно?
@@bymajkakryta1474
Какая именно?
Если стена имеет слой земли и когда перс подходит к ней вплотную, то может совершать кучу прыжков?
Если так, то нужно уменьшить радиус GroundCheck, чтобы он не выходил за пределы коллайдера перса, другими словами он должен быть немного уже персонажа (не должен выходить за его границы, чтобы не пересекаться со стеной)
4:20 Граунд граунд и еще раз граунд)
Ахахах) Есть такое)
Делал прыжок через AddForce. Помещая метод прыжка в Update, персонаж на огромные расстояния одним прыжком улетал(Со значением прыжка 4 улетал до 46 унитов вверх). Помещая метод в Fixed Update прыжок стал адекватным, но не равномерным и каждый третий/четвёртый выходит будто с умноженной высотой. Не могу понять в чём проблема.
Может ты считывал нажатие кнопки с помощью GetButton? Для прыжка лучше ставить GetButtonDown
Привет, не нашел твой телеграм, напиши пожалуйста свой, у меня одна МЕГА проблема, когда увидишь у тебя тоже глаза на выкате будут, как мне кажется, это по юнити
0:11 мне кажется лучше писать не "public" а "[SerializeField] private
Скажите а можно так же сделать рывок по свайпу как в катана зеро и чтоб можно было свайпом задавать направление?
Можно, не знаю, как свайпы обнаруживать, но думаю, труда это не составит
Можно ли сделать прыжок векторным? Типо не импульс будет его толкать, а он будет более "картонным". Классический вариарнт с импульсом может очень много багов образовать, например если очень быстро в прыжке допрыгнуть до земли и прыгнуть еще раз значения приумножатся и прыжок будет очень большим)
Ну, как по мне, так самым простым, настраиваемым и стабильным вариантом является задание скорости. Т.е. что-то типа:
rb.velocity = new Vector2(rb.velocity.x, Y);
где вместо Y указывается скорость (типа сила) прыжка.
Вполне себе рабочий и удобный вариант)
Но стоит учитывать, что в таком случае скорость с которой перс падает и скорость для прыжка суммироваться не будут. Другими словами персонаж может падать с небоскрёба, а перед землёй, нажав прыжок, подпрыгнет вверх и мягонько приземлится...
Если это позволяет геймплей, то всё ок))
Что делать если на 0:51 пишет: Assets\movePlayer.cs(32,13): error CS0103: The name ‘onGround’ does not exist in the current context.? Помогите пожалуйста.
Пишет, что Вы не объявили переменную 'onGround', но при этом пытаетесь её использовать, т.е. пропустили строку:
private bool onGround = false;
Добавьте её где-нибудь вне метода, там где другие переменные объявляются и должно заработать)
Почему красным подчёркивает rb и jumpForce ? Из первого способа
Если проблема все еще актуальна добавь в скрипт Rigidbody2
Private Rigidbody2d rb;
И в void Start
Напиши
Rb = getcomponent();
@@zuba_tv уже нет, но спасибо
Проблема такая: при соединении jump, к например idle, только один переход к обоим анимациям могу сделать и все(
Пытался сделать переход через any state, а там тоже такой прикол с одним переходом. Вроде все как у тебя
У меня была такая же проблема, а заключается она в косяке работы определённой версии Unity
Полазал на форумах и нашёл вот это: Problems with States and Transitions in the Animator и Unable to make State transitions in Animator (Это названия статей),(если интересно там на английском челики сообщили о этой проблеме).
Самих решений 2.
Первое взять и установить новую версию Unity я поставил 2021.2.17f1 и она работает. (2020.3.32f1 - не работала)
Второй вариант (For people not looking to change Unity version we used a workaround : put the inspector in Debug Mode and then right click works as intended.) -
Перевод .
Для тех, кто не хочет менять версию Unity, мы использовали обходной путь: переведите инспектор в режим отладки, а затем щелкните правой кнопкой мыши, чтобы все работало по назначению.
Ну вообщем вот так может что-то поможет
0:51 - скрин кода
вопрос: что делать если unity говорит:The type or namespace name 'Vector2' could not be found (are you missing a using directive or an assembly reference?) вместо Вектора там ещё и другие переменные.
Обычно при создании нового скрипта через Unity, к нему сразу подключаются самые используемые (а порой и необходимые) директивы:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
Они прописываются в самом начале, перед описанием класса.
Думаю, что Вы их просто удали)
Верните хотя бы using UnityEngine;
Хотя лучше бы все три. А после того, как закончите писать скрипты, можно будет неиспользуемые (они будут иметь более тёмный вид) удалить.
@@NoobGameDev Я уже даавно решил эту ошибку, вы оказались правы, посмотрел на ваш код и всё понял, видео классное, завтра буду смотреть следующие части. 👍
Здравствуйте, в новой версии Unity не смог найти physics material 2d. Обычный есть, а 2d нет. Может вы знаете другой способ как убрать прилипания или как исправить проблему с physics material 3d?
Да, они его перепрятали немного: Create -> 2D -> Physics Material 2D
Здравствуйте, сделал как все надо, только вот запускаю. Персонаж запускает анимацию и застыват в анимации прыжка и двигается так же, + к этому и пробел не тыкается. В чем может быть проблема? Цикл на jump еще застрял
Очень похоже на то, что перс не "видит" землю... И считает, что он постоянно падает, ну, поэтому и не прыгает соответственно)
Попробуйте увеличить размер коллайдера объекта GroundCheck. Или ещё лучше, сперва попробуйте дописать эту строку в функцию Start (как в коде под видео):
GroundCheckRadius = GroundCheck.GetComponent().radius;
Она автоматически будет вписывать радиус коллайдера в переменную GroundCheckRadius.
А так же перепроверьте выбрали ли Вы слой Ground в поле Ground в Инспекторе и находится ли платформа, на которой стоит перс, на слое Ground.
@@NoobGameDev Спасибо огромное" Проблема была в слоях, не прикрепил. Теперь проблема осталась другая, как найти physics material 2D? у меня отображается просто physics material
Для таких же гениев как и я, в объекте GroundCheck коллайдер двигать НЕНУЖНО, нужно двигать сам объект с коллайдером
Можете помочь с тем что-бы чел не прыгал в воздухе. Скрипт дайте пж
Привет, я на моменте где добавил onGround и он появился в inspector
но когда запускаю и 2 прыжок все равно работает + все время стоит галочка на onGround
где допускаю ошибку ?
Все разобрался, я не туда добавил Layer
@@geba3596 Расскажи как ты исправил Layer? У меня сейчас так же
Здравствуйте можете помочь у меня пишет в Unity, Animator is not playing an AnimatorController
вот мой код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Прыжок : MonoBehaviour
{
public Rigidbody2D rb;
public Animator anim;
void Start()
{
rb = GetComponent();
anim = GetComponent();
}
void Update()
{
Walk();
Reflect();
CheckingGround();
}
public Vector2 moveVector;
public float speed = 2f;
void Walk()
{
moveVector.x = Input.GetAxis("Horizontal");
anim.SetFloat("movex", Mathf.Abs(moveVector.x));
rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
}
public bool faceRight = true;
void Reflect()
{
if ((moveVector.x > 0 && !faceRight) || (moveVector.x < 0 && faceRight))
{
transform.localScale *= new Vector2(-1, 1);
faceRight = !faceRight;
}
}
public float jumpFource = 7f;
void Jump()
{
if (Input.GetKeyDown(KeyCode.Space) && onGround)
{
//rb.velocity = new Vector2(rb.velocity.x, jumpFource);
rb.AddForce(Vector2.up * jumpFource);
}
}
public bool onGround;
public Transform GroundCheck;
public float checkRadius = 0.5f;
public LayerMask Ground;
void CheckingGround()
{
onGround = Physics2D.OverlapCircle(GroundCheck.position, checkRadius, Ground);
}
}
Здравствуйте) В коде ничего необычного не вижу. Скорей всего, у вас либо выключен компонент Animator (в Инспекторе), либо сам объект находится в неактивном состоянии, либо у компонента Animator нет ссылки на AnimatorController. Но думаю, что без сриншотов будет сложновато объяснить. Посетите наш Дискорд сервер (ссылка есть в шапке канала). Можете заскринить этот комментарий и попросить помощи там. Со скриншотами всяко понятнее и быстрее получится)
Здравствуйте, нужна помощь,выдает ошибку : 'Rigidbody2D' does not contain a definition for 'AddForse' and no accessible extension method 'AddForse' accepting a first argument of type 'RigidBody2D' could be found
Всё верно) Метода "AddForse" не существует, есть метод "AddForce"... (вместо буквы "s" буква "c")
Обычно (если всё правильно настроено), то когда Вы начинаете писать имя метода, то VS предлагает варианты из списка доступных и похожих. А значит, если Вам VS такого списка не предлагает, то советую разобраться с настройками и посмотреть вот это вот видео: ua-cam.com/video/w8J-srV9uzw/v-deo.html
Это поможет Вам в дальнейшем не допускать подобных опечаток, да, и новые методы можете узнать)
@@NoobGameDev понял,спасибо Вам большое!
Здравствуйте, делал все по вашему видео (посмотрел и написал код из: 2, 3 и 4 видео). А сейчас я немогу вставить этот скрипт на персонажа. Выдаёт ошибку вроде этой: -
Can't add script
Please fix compile errors before creating new script components.
Прошу, пожалуйста, помогите!!!
Сорри, поздно увидел сообщение... Проблема в том, что Вы пытаетесь "повесить" скрипт в котором есть синтаксические ошибки. Если проблема актуальна, то перепроверьте новый скрипт (возможно, где-то пропущен символ ";" ) VisualStudio такое должен подчёркивать. А если он этого не делает, то есть подозрения, что он у Вас и с Unity не связан... Поэтому ещё рекомендую глянуть вот это видео (лишним точно не будет): ua-cam.com/video/w8J-srV9uzw/v-deo.html
@@NoobGameDev Хорошо, спасибо, проверю, но хочу уточнить что я работаю на юните которая идет на 32битную windows 7 (то есть Unity 5.6.7f1). И VisualStudio у меня нет. Я подключил к Unity Visual Studio Code (и скачал все что связано с C# и с самим Unity)
@@mrdred2697 Ну, VS Code, если правильно настроен (указан в Unity, как редактор кода хотя бы), то тоже должен выделять подобные ошибки...
а что делать у меня кргда я написал скрипт скрипт остался стандартным а в редактаре скрипта он тот который я написал и когда я добавляю его на персонажа он ничего не делает
Стандартный - это имеется ввиду пустой шаблон, где всего два пустых метода, Start и Update?
И если в IDE он был изменён и сохранён, то почему ты решил, что он не изменился?
Unity в консоли какие-то ошибки выдаёт? Или при добавлении скрипта к персонажу?
Здравствуйте как вы научились так кодить дайте советов смотрю видео ролики пишу повторяю за ними и когда сам пытаюсь получается хрень.
Знаю вопрос не по теме но. Как вы считаете что правильнее, переписывать готовы код и редактировать его или все же писать весь код самому?
Сложный вопрос... Если Вы новичок, то априори не сможете написать код самостоятельно, - Вы, в любом случае будете сначала переписывать примеры, потом поймёте как они работают, а потом придёт осознание того, что нужно поменять, чтобы что-то работало так, как Вам хочется и вот уже после этого сможете написать свой код опираясь на свой опыт.
Если у Вас есть свободное время и желание разобраться в том, что Вы делаете, то, конечно же, пробуйте писать код самостоятельно - это полезнее и интереснее, чем бездумно переписывать...
Но! Я так же считаю, что иногда можно взять и готовый рабочий скрипт, чтобы сэкономить время и сократить кол-во ошибок (но это уже когда будете примерно понимать, как этот скрипт работает).
В общем и целом:
- если новичок - переписывать примеры и гуглить, какое слово в коде что значит;
- почувствовал в себе уверенность - пытаться изменять чужие примеры под свои нужды;
- стал ещё круче - изучать, создавать и применять новые (свои) методы под старые задачи;
- почувствовал себя программистом - к этому времени и сам разберёшься, что дальше делать)
@@NoobGameDev благодарю за ответ)
Все прекрасно работает, но есть один момент, не подскажите как можно его решить? У меня анимация прыжка состоит как бы из трёх этапов, присед - прыжок - приземление (присед после прыжка), так вот, после нажатия пробела, персонаж приседает уже в воздухе, а приземление совсем не проигрывается, так как анимация прыжка прерывается после пересечения колайдера GroundCheck с объектами слоя Ground, можно это как-то пофиксить? И еще один момент, можно каким-то обраpом регулировать длину прыжка?
Я с конца начну)
О контролируемом прыжке есть видео (буквально следующий урок, 5-й), но в нём происходит контроль времени увеличения силы прыжка... Т.е. он будет прыгать дальше за счёт того, что прыгает выше. Есть так же видео об ускорении (беге, 10-й урок), в нём увеличение длины прыжка происходит за счёт увеличения скорости движения во время прыжка. Посмотрите оба видео, может, их комбинация даст, то, что Вам нужно.
А вот с прыжком всё не так однозначно...
Если Вы хотите анимацию перед прыжком, то придётся делать задержку на время проигрывания анимации (т.е. нажали клавишу прыжка, а перс прыгнул через ~0.5 сек.).
А при приземлении, нужно будет на время проигрывания анимации отключать управление героем (чтобы, например, при зажатой клавише управления, анимация не переходила резко из прыжка в ходьбу, или перс не перемещался влево вправо во время проигрывании анимации приземления...)
Получится перед прыжком 0.5 сек., после те же 0.5 сек... и уже секунда (примерно) задержки. А эти все моменты очень ощущаются в игре. Можно ускорить анимацию, но тогда она становится почти не заметной...
Если сделать всё, что я тут предложил, то получится примерно так:
ua-cam.com/video/_unKY_IqiAQ/v-deo.html
А если он теперь прыгает только на определённой части карты?
что делать если выдаёт ошибку Assets\Scripts\Player.cs(43,25): error CS0117: 'Physics2D' does not contain a definition for 'OverLapCircle' помогите! прошу!
Если проблема ещё актуально, то C# чувствителен к регистру букв. В данном случае в "OverLapCircle" написана "L", а должна быть "l", т.е. вот так: "OverlapCircle"
ЧЕЛ - МЕГАХОРОШ!!!
UnassignedReferenceException: The variable GroundCheck of PlayerMovement has not been assigned.
You probably need to assign the GroundCheck variable of the PlayerMovement script in the inspector.
Что делать?
Я справился
@@people278 подскажи пожалуйста как ? нет понимания что не так
@@Lamo1992 привет, всё что я помню с того времени - я всё начал заново, и всё вышло, я уже не помню что я точно делал, извини, это было 3 месяца назад
Там же всё написано. В инспекторе не выбрали Граунд чек, видимо в ячейку забыли перетащить тот объект, который под персонажем создавался. Это было на моменте 4:14
Хорошо объясняешь! Но я правда не могу разобраться - у меня игрок прыгает с какой-то периодичностью чтоли. Грубо говоря, не всегда срабатывает пробел. В апдейте функция джамп есть...
Прыжок разной высоты? Или иногда не срабатывает при нажатии пробела?
@@NoobGameDev да, иногда не срабатывает пробел. Грубо говоря, через раз
Ладно, решил проблему ЭдФорсом) Через велосити почему-то такие траблы...
Здравствуйте, такой вопрос. Почему при нажатии кнопки пробел персонаж может улетать в космос? То есть он не падает обратно, а просто начинает подниматься по оси у до бесконечности.
Приветствую)
А сколько Вы его ждали с орбиты?
В теории - это может произойти при Gravity Scale = 0 (в Инспекторе в Rigidbody), либо при ошибке в коде (если, к примеру ускорение персу придаётся не один раз при нажатии кнопки, а каждый кадр).
Но, скорей всего, если вы делали по уроку, то для условий вашей сцены, у вас слишком большое значение JumpForce.
Как Вы, кстати, делали (через velocity или AddForce)?
Попробуйте его запустить к Зевсу и пойти попить чаю, посмотреть какой-нибудь видосик, и если минут через 10-15 значения по Y не начнут уменьшаться, то есть большая вероятность, что ошибка в коде. Если же цифры начнут возвращаться к нулю, то проблема в сильно большем, чем нужно значении силы прыжка)
@@NoobGameDev большое спасибо за ответ, буду пробовать) Делал через AddForce
я 80-тый который прокомментировал еее)
Когда я запускаю и пробую прыгать в инспекторе показывается что On ground всегда с галочкой и мульти прыжок все еще есть, помогите как это пофиксисть?
Это значит, что перс постоянно "видит" землю, а это, скорей всего означает, что у Вас слишком большое значение в поле GroundCheckRadius. Значение должно быть равным радиусу коллайдера объекта GroundCheck.
Так же чтобы не проверять это при каждом изменении можно в ф-ю Start дописать эту строку:
GroundCheckRadius = GroundCheck.GetComponent().radius;
Она автоматически при запуске игры будет вписывать значение радиуса коллайдера GroundCheck в поле GroundCheckRadius
@@NoobGameDev Я и поставил радиусы одинаковыми но все равно мульти прыжок есть
@@semzero277 Тогда такое ещё предположение: в Инспекторе в поле Ground должны быть выбраны только слои, на которых может стоять перс (например Ground, Platform). А если там будет выбран слой, на котором находится сам персонаж (Player) или все слои (Everything), то как раз и будет такое поведение.
Или если сам объект GroundCheck находится на слое Ground - он должен быть на том же слое, что и персонаж (например Player) или на каком-нибудь нейтральном (например Default)
UPD: ещё одна мысль. Точно ли GroundCheck дочерний для персонажа объект? Должна быть такая структура:
Player:
- GroundCheck
Т.е. GroundCheck нужно перетащить В персонажа.
Для таких вопросов скриншоты очень хорошо подходят, поэтому если есть Дискорд, то присоединяйся к серверу, там гораздо быстрее и проще можно помочь: discord.gg/AHpWFBAJJr
Большое спосибо за видео, но только персонаж у меня тоже не прыгал. Наверное из-за того, что слой GroundCheck у меня был чуть выше ног игрока(возможно не я один сделал эту ошибку). Опустив GroundCheck ниже ног, мой персонаж смог запрыгать.
У меня проблема ,не работает анимация .
В аниматоре при срабатывании OnGround состояние прыжка мигает(шкала снизу )
В параметрах в аниматоре OnGround работает стабильно
скорость анимации менял ,сама анимация из 2 кадров
Нужно проверить переход от прыжка к покою (и к ходьбе). Есть подозрение, что там ошибка типа: в условии onGround = false вместо true.
Как раз в таком случае анимация может из покоя быстро переключиться на прыжок и тут же переключиться обратно.
@@NoobGameDev я проверил ,со скриптом и переходами всё ок
@@t4shok628
Тогда можно попробовать добавить кадров к анимации (любых), чтобы их не 2 было, а скажем 10. И посмотреть, если анимация будет воспроизводиться как надо, то проблема в анимации, а если и с 10-ю кадрами она будет всего лишь "промаргивать" то проблема либо в коде, либо в Аниматоре (что скорее всего).
В идеале записать бы видео с проблемой, пощёлкать переходы, код промотать и скинуть мне в ВК или Телегу, что бы не гадать)
@@NoobGameDev скорее всего я понял в чём проблема ,у меня вместе с Jump мигает и idle
у меня почему то персонаж вообще не прыгает(( вот если что код:using UnityEngine;
public class MovePlayer : MonoBehaviour
{
public float speed = 30.0f;
public float jumpForce = 350.0f;
private Rigidbody2D rb;
void Start()
{
rb = GetComponent();
}
void Update()
{
Jump();
float moveX = Input.GetAxis("Horizontal");
rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime);
}
void Jump()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
}
}
Assets\Scripts\PlayerController.cs(20,9): error CS1955: Non-invocable member 'PlayerController.jumpForce' cannot be used like a method.
Вы пытаетесь jumpForce использовать как метод... Что у Вас в 20-й строке?
У меня вопрос на счёт строчки
public Animator anim;
У меня в инспекторе написано что "None (Animator)"
Что именно мне туда перетянуть?
А вы ещё ни одной анимации не делали для персонажа?
Там нужен компонент Animator Controller, если не ошибаюсь, то при создании первой анимации, автоматически создаётся контроллер для того объекта которому была создана анимация.
Но можно его создать и добавить вручную, почти так же, как и скрипт создавали: правой кнопкой -> Create -> Animator Controller -> можно его переименовать -> и перетащить в поле Controller блока Animator (или нажать на кружок справа от поля и выбрать нужный контроллер)
@@NoobGameDev я это уже исправил, но в любом случае спасибо
Использовать public чтоб просто работать в инспекторе так себе идея, есть такая вещь как [SerializeField] стоило сказать это, хотя бы просто сказать и использовать дальше public
Все норм, но не понимаю пару вещей:
1) Когда персонаж упирается в стену его начинает трести.
2) не совсем понял про прыжок, т.е. я поставил гравитацию на 30 (у всех объектов), но падать быстрее он не стал, а идёт обычный прыжок( он занимает много времени и позволяет банихопить)
Подскажите как исправить :D
Начну со второго: нужно -30 (минус 30), а то он вообще как на Луне должен скакать) И насколько я знаю, то BHOP - это тема 3D игр (особенно CS, Doom) суть которой перемещаться быстрее при помощи распрыжки. Или имеется ввиду, что персонаж прыгает над землёй? Если да, то нужно уменьшить значение переменной CheckRadius в Инспекторе или коде.
А вот с тряской у стены, это не совсем понятно... Происходит быстрое переключение анимаций или небольшое подпрыгивание или наоборот проваливание? Просто звучит знакомо, что-то похожее было у меня, но проблема была в быстром переключении анимаций из-за неправильных условий в переходах в Аниматоре.
вот у меня вопрос, мне не нужен будет прыжок от стен и коллайдер персонажа у меня квадратный, соответственно ему нужна другая проверка земли, иначе он сможет прыгать только из середины блока, как мне сделать нормальный триггер земли, ведь если я попытаюсь увеличить радиус, то он начнёт считать стены за землю и отпрыгивать от них, как сделать триггер либо хитбоксом самого персонажа и сделать отдельный слой для стен, либо сделать как в обучение юнити и добавить разных состояний прыжка и не используя слои. Можете рассказать про 2 этих способа или рассказать про другие варианты ?
Совсем не понял про прыжок из середины блока... ) Данный вариант, на мой взгляд, наиболее универсален. Согласен, что он немного запутан (всё-таки одно из первых видео - буду переделывать), но он прекрасно работает и с квадратными персами и с круглыми, так как это по сути значения не имеет. Есть просто куча способов проверки:
1. Кастами (лучами, лучами похожими на квадрат, круг или произвольный коллайдер) - самый популярный Raycast
2. Областями (кругами, квадратами, коллайдерами, точкой) - популярный OverlapCircle (как в видео)
3. Контактами коллайдеров (через оnTrigger и onCollision, либо при помощи методов getContacts или isTouching)
И для всех этих способов можно применять ещё и ContactFilter2D, в котором можно настроить направления нормали для считывания, слой для считывания и пр.
Из того, что Вы хотите, больше всего подходит использовать проверку контакта коллайдера вместе с фильтром контактов... Что-то типа этого:
_onGround = _mainCollider.isTouching(_contactFilter);
Естественно сделав поля для основного коллайдера и фильтра (и настроив его).
Каждый из способов имеет свои преимущества и недостатки. Что-то можно просто и наглядно отобразить, что-то из этого остаётся только представлять в голове. В видео что-то среднее))
Я понимаю, что от моего ответа Вам вряд ли стало легче)) Потому что для начинающих слишком много информации, поэтому можете посетить Дискорд сервер (ссылка есть в шапке канала) там можно это всё показать более подробно, а так же посмотреть короткое видео по тому же способу, что и в данном видео, только чуть проще (возможно Вы его и оставите): ua-cam.com/users/shortsM0F-XIxdKIU
в таком случае ты создаешь 2 слоя коллайдеров. 1 - для onGround. Чтобы персонаж ходил.
Другой слой - чтобы ты строил стены и.т.п
С тайлмапами так же. Создаешь композит коллайдер для персонажа, чтобы он ходил .и.тп.
2й - для стен.
и еще, можешь настроить в анимациях, Чтобы CheckGround - дчоерний объект персонажа, тоже двигался и был всегда впереди.
Мне почему-то пишет "Parameter 'onGround' does not exist.
6:51 почему " SetBool" выдаёт ошибку?
Без кода ошибки непонятно...
Вот несколько причин:
1. Ошибка в написании.
2. Вы передаёте в Аниматор не логическое значение (true / false), а, например int.
3. В самом Аниматоре нет логической переменной с таким именем.
@@NoobGameDev Спасибо я уже все исправил :)
У меня такая проблема: при прикосновениях к стенкам, мой персонаж может прыгать как ему вздумается, а сделать слой Wall я не могу, т.к я делаю через tilemap. Как мне это исправить?
Вам нужно сделать поменьше сферу проверки земли, чтобы она не выходила за бока перса. Другими словами сейчас (скорей всего) когда перс упирается в стену, то сфера проверки земли касается стены, поэтому нужно её уменьшить. Вам бы это показать на картинке, но тут нет такой возможности... Поэтому, если не поняли о чём я, то можете зайти к нам в Дискорд (ссылка в шапке канала), там можно наглядно объяснить)
4:57 все сделал в точности так, персонаж больше не прыгает
using UnityEngine;
public class Player : MonoBehaviour
{
public float speed;
public float jumpForce;
public Rigidbody2D rb;
private void Update()
{
ChekingGround();
if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector2(speed,rb.velocity.y);
}
if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector2(-speed,rb.velocity.y);
}
if (Input.GetKeyDown(KeyCode.Space) && onGround)
{
// rb.velocity = new Vector2(rb.velocity.x, jumpForce);
rb.AddForce(Vector2.up * jumpForce);
}
}
public bool onGround;
public Transform groundchek;
public float checkRadius = 0.5f;
public LayerMask ground;
private void ChekingGround()
{
Physics2D.OverlapCircle(groundchek.position, checkRadius, ground);
}
}
добавь больше знаечение в jumpforce примерно 250-350
Что за обьект Ground?? от куда он взялся? что с ним делать?
1. Ground - это объект группировки для платформ (т.е. если его развернуть, то в нём будут находиться платформы)
2. Взялся он из первого урока: ua-cam.com/video/T79gLl5Dljg/v-deo.html
3. В него нужно перемещать платформы, как для порядка в Иерархии, так и для того, чтобы иметь возможность группировки платформ и создания для них композитного (одного общего) коллайдера, а также данный объект со всеми дочерними объектами (т.е. платформами) стоит перенести на слой Ground, чтобы иметь возможность определять стоит ли персонаж на земле.
Можете, пожалуйста, объяснить: когда я даю полу слой ground, пол пропадает, но только в режиме конструирования, а если запустить игру, то всё появляется как было. Да, при этом ничего не портится, но приносит это малейшие неудобства, но можно ли это чуть-чуть исправить?
Боюсь, что я с подобным не сталкивался... Единственное, что приходит в голову - это то, что Вы могли отключить видимость Gizmos в окне Scene, а при запуске в окне Game всё видно. Либо что-то не так с осью Z. Например слой земли находится слишком близко к камере или за ней, проверьте этот момент. В 2D хорошей практикой будет следить за тем, что по оси Z объекты были в нуле (кроме камеры). И что-то больше идей нет... Советую, зайти к нам на Дискорд сервер (ссылка есть в шапке канала и описании) и задать данный вопрос в соответствующем канале. В идеале записать видео проблемы. И либо я, либо кто-то из ребят попробуем в этом разобраться)
@@NoobGameDev хорошо, спасибо. Не то чтобы это прям сильно замедляло процесс, но доставляет неудобство
@@Virfi_ попробуй нажать f мне помогло
Сделал все как на видео, пересмотрел раз 10, у меня не работает анимация прыжка, и мульти прыжок и onGround вкл постоянно в чем может быть проблема?
Вероятнее всего, это всё из-за слишком большого значения переменной "Check Radius". Основную роль играет именно это значение в поле Инспектора (не в коде)
Сделайте так: подберите радиус Circle коллайдера у объекта Ground Check (он должен быть немного меньше границ коллайдера перса, чтобы если упереться в стену, то круглый коллайдер для проверки земли её не касался). После того как настроили размер, скопируйте значение радиуса этого зелёного круга и вставьте это значение в поле Check Radius.
И попробуйте снова.
Если не хотите каждый раз изменять значение Check Radius вручную, то в ф-и Start можете дописать такую строку:
GroundCheckRadius = GroundCheck.GetComponent().radius;
Она это будет делать автоматически при старте игры.
Ах, да! Ещё на всякий случай проверьте, чтобы GroundCheck был дочерним объектом перса (вложенным в него).
Т.е. чтобы в Иерархии была такая структура:
ПЕРС-|
- GroundCheck
@@NoobGameDev Строчка автоматического радиуса - есть, дочерним тоже он является, но не работает, не понимаю в чем проблема, (Сделал так что бы круг не выходил за пределы границ персонажа, но мульти прыжок все равно есть)
И еще сделал в анимации все как у вас на видео, персонаж прыгает, бегает (с анимацией из прошлого видео) но в прыжке анимации нет, в аниматоре просто ничего не происходит, не знаю что делать, все настройки onGround точно так же как на видео- а не работает.
@@FINE356
Ну, с анимацией прыжка всё ясно - она и не будет работать, если перс всё время детектит землю. А вот почему это происходит - это надо выяснять...
Скинь код сюда или в ВК, я посмотрю на всякий случай...
Когда сделал анимацию прыжка моделька перестала поворачиваться, подскажите в чем может быть дело?
Ну, единственное, что приходит в голову - это вы записали Flip в анимации... Попробуйте пересоздать новую и следить за этим моментом. Хотя, в таком случае, если во время прыжка понажимать влево-вправо, то он должен поворачиваться...
Или перс перестал поворачиваться даже, когда просто ходит? Я бы советовал к нам в Дискорд заглянуть (ссылка есть в шапке канала). Просто там всё наглядно можно показать, понять и вычислить причину.
помогите пожалуйста если такая ошибка
4:55 что делать если перс не делает мультипрыжок но и не ходит!(((
Ошибок Unity не выдаёт? Если нет, то скиньте код, возможно где-то там логическая ошибка.
UPD: или попробуйте скопировать код из под видео.
У меня анимация прыжка обратно в анимацию покоя не переходит
Помогите пожалуйста у меня горой(Character) улетает наверх
Этому 2 основные причины:
1. Слишком большое значение JumpForce
2. В коде (в методе Jump) допущена ошибка (многие пишут Input.GetKey(KeyCode.Space), что значит "клавиша ЗАжата", а нужно Input.GetKeyDown(KeyCode.Space), что значит "клавиша была НАжата")
Если это не решит Вашу проблему, то советую зайти на наш Дискорд сервер (ссылка есть в шапке канала), там можно и код и скрины скинуть)
@@NoobGameDev Спасибо)
А что делать, если во вкладе Create нету Physics Material 2D, а только Physics Material ?
Он немного поглубже спрятан (может, кстати, от версий Unity отличается - нужно проверить).
Попробуй тут поискать:
Create -> 2D -> Physics Material 2D
Я конечно понимаю, это типа простой способ, все дела, но он же прыгает с рандомной силой, в зависимости от того в какой момент падения снова нажмешь прыжок, он прыгнет или на высоту 2, или на высоту 4, и это непредсказуемый рандом. Это так работает AddForce или я где-то напартачил?
P.s. В игре также есть платформы, и если персонаж подпрыгивает на платформу и в этот момент зажат пробел, а над платформой еще платформы, он разгоняется до орбитальных скоростей
у него 5 урок это "Контролируемый прыжок" Если ты имеешь это ввиду
у меня проблема, маленькая, есть задержка перед переходом из анимации прыжка в любое другое состояние, с каким то шансом, а в большинстве прыжков переход происходит мгновенно
Скорей всего, в переходах от прыжка к другим анимациям у Вас включен выход из анимации по её завершению (стоит галочка Has Exit Time - уберите её). Ещё могут быть не корректно заданы (или не заданы вовсе) условия перехода (onGround = true / onGround = false).
Из-за Has Exit Time анимация сменится только тогда, когда закончится текущая. Т.е. в вашем случае зачастую анимация успевает проигрываться за время вашего прыжка. А иногда (допустим при запрыгивании на платформу) может доигрываться анимация прыжка, когда по логике должна идти анимация покоя, к примеру)
@@NoobGameDev Спасибо, помог)
Смотрю уже 4 ролик ну походу не починю(
Привет, сделал все как у вас, всё работает, все отлично, но если поиграться персонажем, то бывает, что при прыжке в сторону и приземлении на землю, персонаж улетает в указываемую сторону со скоростью света, троит в стене и проваливается под землю. Это так и должно быть?)
Да, это вполне адекватное поведение - скоро он устанет так быстро бегать и начнёт передвигаться нормально) Ну, а если серьёзно, то я даже не знаю, чем это может быть вызвано... Я его по всякому мучал, но такого эффекта, как Вы описываете ни разу не наблюдал. Перемещение как делали? если через AddForce, то ещё могу понять, он порой непредсказуемо себя может вести... Ну, а так нужно смотреть код, а если там ничего подозрительного, то в сцену тыкать...
В идеале бы записать это на видео (чтобы увидеть сие безобразие) и к нам в Дискорд кинуть, может, кто-нибудь из ребят сталкивался)
@@NoobGameDev Поковырялся в Unity, нужно было поставить в риджитбоди параметр Collision Detection на Continuous. Вы вроде это в видео показывали, подвела моя невнимательность)
@@igoryan6175 Так это, вроде в Рывке было, а не в Прыжке... У меня поэтому даже и не мелькнуло.
А для рывка есть один нюанс: если будете использовать наклонные поверхности, то если "рвануть" прямо на них - перса вверх отбросит, поэтому, если перс в состоянии рывка и касается земли, то нужно нулить ему скорость. Можете в комментах под видео с Рывком посмотреть, я там это несколько раз расписывал, вроде бы)
@@NoobGameDev автор, помоги плиз.
Я написал всё точно как в видео
Через velocity то у меня выбивает ошибку CS1061
@@Omegon1235 CS1061 - Эта ошибка возникает при попытке вызвать несуществующий метод или получить доступ к несуществующему члену класса.
Обычно дальше в описании ошибки идут подробности, по которым и вычисляется проблема.
Наверное, вы уже её решили... Но в следующий раз присылайте текст ошибки полностью - это ускорит "диагностику")
у меня вообще персонаж не прыгает, хоть скрипт взял из описания
а что делать если персонаж медленно падает ?
Обычно такое происходит, если где-то обнуляется скорость, например в управлении:
rb.velocity = new Vector2(inputVector.x * speed* Time.deltaTime, 0f);
И вот медленное падение будет как раз-таки из-за нуля по Y вот здесь : " 0f);"
Там необходимо передавать текущую скорость по Y:
rb.velocity = new Vector2(inputVector.x * speed* Time.deltaTime, rb.velocity.y);
Тогда падение будет происходить адекватно.
Так же нужно иметь ввиду, что если управление сделано через Input.GetAxis, то когда не происходит нажатия на клавиши управления, то и по X и по Y значения будут равны нулю.
@@NoobGameDev спасибо
гравитацию можно еще увеличить
привет почему когда персонаж прыгает то на земле анимация не заканчивается?
Видимо, та же проблема с переходами. Просмотрите их все, у них в настройках не должно быть галочки Has Exit Time.
Или анимация зацикливается (по кругу играет). В таком случае в Аниматоре дважды кликните по интересующей Вас анимации и уберите галочку с поля Loop (оно отвечает за зацикливание анимации)
@@NoobGameDev спасибо
А что делать если попробовал 2 способа прыжка,но персонаж летит наверх,вроде в коде всё правильно написал.Заранее спасибо!
Скорей всего нужно лишь подобрать нужное значение силы прыжка. Попробуйте прыгнуть и подождать минуту, а в это время смотрите за положением перса по Y (в Инспекторе). Если оно будет расти, а потом через какое-то время (10 - 30 сек. - минуту) значение начнёт уменьшаться, то проблема в очень высоком значении силы прыжка - нужно уменьшать (через Инспектор)
@@NoobGameDev Спасибо!
Допустим, но почему-то прыжок очень резкий( персонаж резко полетает вверх и медленно падает). Делал через AddForce.
Именно резкий, или сильный, высокий? Просто звучит очень знакомо, но, возможно, это не то о чём я подумал.
В общем, для начала посмотрите из какой функции у Вас вызывается функция прыжка? Что-то мне подсказывает, что из FixedUpdate... Попробуйте удалить её из FixedUpdate и вызвать через Update (или наоборот).
Если это не даст результата, то попробуйте добавить ещё один аргумент (ForceMode2D.Impulse) в метод AddForce, чтобы получилось следующее:
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
Блин, почему-то у меня пробел срабатывает через раз и игрок прыгает не всегда. Не знаете что могло вызвать данную проблему?(Код прыжка такой же как у Вас)
Это один из минусов, когда нажатие клавиши считывается в FixedUpdate. Все нажатия от игрока лучше читать в обычном Update.
Типа этого:
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) { /* вызов метода прыжка */; }
}
@@NoobGameDev Спасибо Вам огромное за ответ, я Вам очень сильно благодарен)
Почему у меня исчезли из вида земля, она как бы есть(когда нажимаешь Play), но в редакторе её нет
Т.е. нет картинки Земли? Её не видно ни в окне "Game", ни в окне "Scene"? А если нажимаете "Play", то перс падает и стоит, как бы в воздухе? Если ответы на все вопросы "Да", то 90%, что у вас на объекте отключен компонент "Sprite Renderer". Выберите в Иерархии объект (Землю) и в Испекторе поставьте галочку у компонента "Sprite Renderer"... Помогло? Или я что-то не так понял?
@@NoobGameDev спасибо