#5 - Контролируемый прыжок в Unity 2D

  Рет қаралды 14,685

Noob Game Dev

Noob Game Dev

Күн бұрын

Уроки по созданию 2D платформера на Unity.
В видео рассказывается, как сделать контролируемый (длинный, долгий, управляемый, затяжной) прыжок, сила которого зависит от длительности нажатия клавиши прыжка.
Код из урока (через FixedUpdate): drive.google.c...
Код из урока (через Update): drive.google.c...
Discord: / discord
Вконтакте: noob_ga...
Телеграм: t.me/Noob_Game...

Пікірлер
@KamilMahomedov
@KamilMahomedov 4 жыл бұрын
все четко))) спасибо большое)))выпускай пожалуйста побольше таких видеоуроки!был бы тебе очень благодарен, ты лучший и офигенно обьясняешь!
@NoobGameDev
@NoobGameDev 4 жыл бұрын
Взаимное спасибо!) Значит будем продолжать)
@fasbodeveloper8170
@fasbodeveloper8170 6 ай бұрын
большое спасибо чел! много раз уже выручал
@allrom9855
@allrom9855 3 жыл бұрын
Полезная вещь! Спасибо!
@3xac7
@3xac7 6 ай бұрын
если прыжок почти никак не изменяется и при этом нужно ставить слишком огромные значения jumpValueIteration, то вам нужно ограничить fps, то есть прописывать при старте Application.targetFrameRate = 60;
@FrogFrogi
@FrogFrogi 4 ай бұрын
Я не уверен , что заметишь, но когда у меня персонаж один раз подпрыгивает то потом он прыгать не может даже когда стоит на земле не знаете из за чего это может быть
@shushard
@shushard 4 жыл бұрын
огонь
@NoobGameDev
@NoobGameDev 4 жыл бұрын
Мерси)
@Scgoozya
@Scgoozya Жыл бұрын
Когда персонаж запрыгивает на платформу, он стоит на ней, но в режиме полёта/прыжка и я могу по ней только передвигаться (также зависнув с анимацией прыжка), но прыгнуть с неё или как минимум стоять на ней с анимацией покоя я не могу, как исправить? Хотя уже 3 года этому видео, вряд ли кто-то ответить :') Но заранее спасибо
@usergameplay323
@usergameplay323 Жыл бұрын
мне понравился твой курс только у меня возникла проблема когда я нажимаю на пробел то мой персонаж улетает в космос всё перепроверили всё как у тебя и я ещё начинающий программист помоги пожалуйста
@NoobGameDev
@NoobGameDev Жыл бұрын
Обычно это связано либо со слишком большим значением силы прыжка, либо используется метод считывания Зажатия GetKey, вместо Нажатия GetKeyDown
@newdarkmagic5809
@newdarkmagic5809 3 жыл бұрын
У меня почему то при ходьбе в левую сторону камера просто отключается показывая лишь фон unity (голубой экран) что делать? Камера прикреплена к персонажу
@NoobGameDev
@NoobGameDev 3 жыл бұрын
Просто прикрепить камеру к персу можно конечно, но это "такое" себе... ) Попробуйте немного изменить ф-ю отражения спрайтов например чтобы было вот так: public bool faceRight = true; void Reflect() { if ((moveVector.x > 0 && !faceRight) || (moveVector.x < 0 && faceRight)) { Vector3 temp = transform.localScale; temp.x *= -1; transform.localScale = temp; faceRight = !faceRight; } }
@newdarkmagic5809
@newdarkmagic5809 3 жыл бұрын
Спасибо!
@themegajediOBVM
@themegajediOBVM 4 жыл бұрын
Здравствуйте автор. Смотрю Ваши ролики - все интересно. У меня вопрос. А как реализована колизия или как там это называется. Ну когда персонаж сквозь пол не падает, или если при прыжке над головой персонажа платформа, то при прыжке персонаж остагавливается при касании головой о платформу. Или же, как делают в некоторых платформерах наоборот, прыжок через такую платформу идёт насквозь, но потом остаётся персонаж на ступеньку выше.
@NoobGameDev
@NoobGameDev 4 жыл бұрын
И Вам здравствовать!) Вы, опережаете мои мысли - это здорово)) Ролик по данной теме как раз делается и через пару дней будет на канале!
@themegajediOBVM
@themegajediOBVM 4 жыл бұрын
@@NoobGameDev Спасибо за ответ! С нетерпением жду!
@flickyshka2686
@flickyshka2686 4 жыл бұрын
всё оч круто но при значении 60 в jumpValueIteration у меня персонаж просто улетает в верх пока я не отпущу пробел по при значении 1000 он при полном зажатии пробела доходит почти до конца но падает а потом несколько секунд не может прыгнуть это можно как то решить?
@flickyshka2686
@flickyshka2686 4 жыл бұрын
оу я попробовал решение которое вы оставили снизу и всё сработало но я так и не понял что я не дописал
@NoobGameDev
@NoobGameDev 4 жыл бұрын
​@@flickyshka2686 Если осталась старая версия Вашего кода, скиньте - посмотрим, вычислим) И спасибо Вам!) Благодаря этому вопросу, я нашёл ошибку в примере кода, а так же один неприятный момент в работе примера. А по поводу Вашего вопроса... jumpValueIteration - это кол-во кадров, в течение которых происходит контроль прыжка. След-но, при jumpValueIteration = 1000 и производительности ПК в 100 fps, контроль может длиться до 10-ти сек. И, видимо, раз контроль прыжка не сбрасывался при приземлении, то ошибка была связана с переключением jumpControl (с true на false). По крайней мере, я бы искал ошибку где-то в том направлении)
@flickyshka2686
@flickyshka2686 4 жыл бұрын
@@NoobGameDev не осталась. но всё равно спасибо
@Cheboksarov
@Cheboksarov 4 жыл бұрын
таже беда,не могу понять улетает вверх
@sesorot
@sesorot 2 жыл бұрын
Супер курс, все очень понятно и предельно просто! Вот только есть проблема, прыжок работает, но всегда с одинаковой силой, а когда зажимаю пробел, то персонаж постоянно прыгает маленькими прыжками. Второе меня не особо волнует, но то, что не работает настраиваемый прыжок, не очень приятно. Какая может быть проблема? Код писал вручную, пробовал и с update, и с fixed update. До этого вообще была проблема, когда при запуске я могу сделать одни прыжок, а дальше могу просто ходить, а прыгать нет. Не знаю, с чем это было связано, но с fixed update это пропало.
@NoobGameDev
@NoobGameDev 2 жыл бұрын
Раз руками писали, то кидайте код - глянем на всякий случай сперва)
@sesorot
@sesorot 2 жыл бұрын
@@NoobGameDev проблема в том, что код идентичный, и проблема вряд ли из-за него. Скорее всего, дело в проверке onGround, хотя точно утверждать не могу)
@sesorot
@sesorot 2 жыл бұрын
@@NoobGameDev и правда, проблема была в коде. Переписав код из видео были проблемы, описанные выше, однако скопировав код из гугл диска, я заметил, что код был другой и кое-что было изменено) теперь все работает, как нужно)
@kostyakrabik4529
@kostyakrabik4529 3 жыл бұрын
Автор молодец! Есть вопрос, мне всё понятно и я скопировал тот же код, но у меня он не работает. То есть всё так же как и было, хотя ошибок не выдаёт. С зажимом пробела и без - одно и тоже. Из за чего это может быть? Ответь если не сложно.
@NoobGameDev
@NoobGameDev 3 жыл бұрын
Спасибо) Оба варианта пробовали? И через Update и через FixedUpdate? И что с высотой прыжка она стала меньше, больше или она не изменилась?
@kostyakrabik4529
@kostyakrabik4529 3 жыл бұрын
@@NoobGameDevВысота не изменилась, да попробовал через Update и FixedUpdate.
@NoobGameDev
@NoobGameDev 3 жыл бұрын
@@kostyakrabik4529 Что-то не то... Определённо поведение должно было хоть как-то измениться... А код из под видео копипастил или вручную с видео переписывал? UPD: Как вариант: перепроверь, возможно у тебя использован метод GetKeyDown вместо GetKey в первой строке... Должно быть так: if (Input.GetKey(KeyCode.Space)) В таком случае, если значение JumpForce достаточно большое, то может получиться очень похоже на обычный прыжок... Других идей пока нет.
@NakTerHao1
@NakTerHao1 2 жыл бұрын
@@NoobGameDevПростите, прошёл год с того комментария, но у меня тоже возникает абсолютно такая же проблема, а в самом начале использован метод GetKey
@NoobGameDev
@NoobGameDev 2 жыл бұрын
@@NakTerHao1 Пробовали и через Update и через Fixed Update (коды в описании под видео)? Простой прыжок вообще работает или сразу контролируемый делали? И пробовали ли изменять значение JumpForce (через Инспектор)?
@zoloman1253
@zoloman1253 4 жыл бұрын
А почему Когда делаешь Рестар сцены то меняется сила прыжка???
@NoobGameDev
@NoobGameDev 4 жыл бұрын
Вероятно, Вы изменяете параметры, когда игра запущена. А когда Вы её останавливаете, то изменённые параметры сбрасываются. Логика такая: запустили игру, подобрали параметры в инспекторе, запомнили, остановили игру, изменили параметры в инспекторе на запомненные (в идеале и в скрипте сразу же). Так это в Unity сделано, сам тоже частенько путаюсь, уверен, что многие тоже)
@РоманГолдун-й3и
@РоманГолдун-й3и 2 жыл бұрын
Привет! Отличное видео, однозначно лайк + подписка) Есть одна проблема: когда зажимаю пробел, то персонаж взмывает в воздух и не опускается! Пробовал делать через FixedUpdate, но проблема осталась. Как пофиксить?
@NoobGameDev
@NoobGameDev 2 жыл бұрын
Делайте через Update, но только эту строку: rb.AddForce(Vector2.up * jumpForce / (jumpTime * 10)); измените следующим образом: rb.AddForce(Vector2.up * jumpForce / (jumpTime * 10) * Time.deltaTime); И перепроверьте действительно ли перс не возвращается. Потому что, скорей всего, jumpForce имеет слишком большое значение. Попробуйте запустить перса в стратосферу) и обратить внимание на значение Position по Y в Инспекторе. После этого не выключая PlayMode (когда игра запущена) отвлекитесь на пару минут, а потом снова посмотрите позицию по Y. Если она станет меньше, чем была пару минут назад, то всё работает корректно, просто значение jumpForce нужно значительно уменьшить)
@Metteam142
@Metteam142 3 жыл бұрын
Здравствуйте у меня проблема. Когда зажимаю кнопку прыжка игрок подпрыгивает и после этого отталкивается от воздуха и так бесконечно, jumpForce делаю меньше он прыгает с дёрганьем, делаю больше он делает толчок от воздуха и улетает(
@Metteam142
@Metteam142 3 жыл бұрын
Я разобрался!!!!! Проблема была в одной строчке, там отступ я сделал не тот😅
@Metteam142
@Metteam142 3 жыл бұрын
@Noob Game Dev, большое вам спасибо за то что приложили усилия для кучи уроков, объясняете великолепно, всё понятно, рад то что хвалите в некоторых видео, это мотивирует)
@Cheboksarov
@Cheboksarov 4 жыл бұрын
Привет,уроки огонь!!!Сразу к делу: делал всё как у вас,но персонаж улетает вверх после нажатия пробела, сильно высоко-скрипт перепроверил-не помогло, скопировал ваш скрипт под видео- не помогло,гравитацию не изменял.Как можно исправить?-заранее спс
@NoobGameDev
@NoobGameDev 4 жыл бұрын
Спасибо!) Смотрите, во-первых, правильнее будет использовать вариант через (FixedUpdate). А, во-вторых, попробуйте использовать меньшее значение "jumpForce" (эти значения индивидуальны для каждого проекта... я тоже попробовал вставить этот код в текущую версию, и перс так же взмыл вверх, но при исправлении "jumpForce" на 40 - всё стало красиво). И ещё один важный момент - он у вас приземляется после прыжка? Или постоянно набирает высоту?
@Cheboksarov
@Cheboksarov 4 жыл бұрын
@@NoobGameDev спс за быстрый ответ, .приземляется , и прыгает сильно высоко и раздница между коротким и высоким прыжком очень маленькая ,т.е высота прыжка. Уменьшал jumpValueIteration постепенно до 10 ничего не изменилось особо ,есть телеграм или вацап скинул бы небольшое видео ,вы бы проверили.
@Cheboksarov
@Cheboksarov 4 жыл бұрын
@@NoobGameDev Смотрим - хорошо подаёшь видео (даже "За**ись").Нашел решение этой проблемы позже скину.Новых видео ждём )))
@NoobGameDev
@NoobGameDev 4 жыл бұрын
@@Cheboksarov Спасиб) Это гуд! Молодцом!) А я только прочитал... Рад, что у меня зрители и сами своей мозгой шатать умеют)) Кстати, телега: evgeny_orlov_ngd
@sally4564
@sally4564 4 жыл бұрын
Не знаю почему но у меня только один раз прыгает при запуске игры и потом нет,перезапускаю и опять 1
@NoobGameDev
@NoobGameDev 4 жыл бұрын
Хм... Такое поведение может возникать, если вы не дописали либо первый, либо второй блоки "else", а так же не стоит объединять нажатие кнопки и нахождение на земле, т.е. условие "if (Input.GetKey(KeyCode.Space) && onGround)" будет работать иначе, чем пример в видео... Возможно что-то из перечисленного Вам поможет, перепроверьте (сверьте) код, либо вставьте код из видео (он ниже), ф-я "Jump" в данном случае должна вызываться из ф-и "Update". Или если Вы внесли много своих правок в пример, то пришлите код Вашей функции прыжка и используемые ею переменные (как ниже) и я попробую помочь. public float jumpForce = 210f; private bool jumpControl; private int jumpIteration = 0; public int jumpValueIteration = 60; void Jump() { if (Input.GetKey(KeyCode.Space)) { if (onGround) { jumpControl = true; } } else { jumpControl = false; } if (jumpControl) { if (jumpIteration++ < jumpValueIteration) { rb.AddForce(Vector2.up * jumpForce / jumpIteration); } } else { jumpIteration = 0; } }
@sally4564
@sally4564 4 жыл бұрын
Так и есть =))) пересмотрела все более внимательно и нашла это else которое пропустила
@lidjest9888
@lidjest9888 3 жыл бұрын
Это снова я))) . Подскажите, когда я перепрыгиваю на другую платформу, у меня перестает проигрываться анимация, т.е перс двигается в то или иную сторону, но анимация не проигрывается. И перестает действовать прыжок и т.д.
@NoobGameDev
@NoobGameDev 3 жыл бұрын
Скорей всего, у той платформы, на которую Вы перепрыгиваете, не назначен слой земли) Или слой с платформами не указан в качестве одного из тех слоёв, которые скрипт считает за землю (в Инспекторе в поле Ground указан только слой Ground без Platform). Поэтому перс думает, что он в воздухе и кроме анимации падения (или последнего кадра прыжка) ничего не проигрывается и следовательно прыгнуть в воздухе он тоже не может.
@lidjest9888
@lidjest9888 3 жыл бұрын
@@NoobGameDev спасибо.
@ДобрыйЧел-г4у
@ДобрыйЧел-г4у 2 жыл бұрын
Как реализовать на андроид помогите пожалуйста!
@samratshaxmerdenov8186
@samratshaxmerdenov8186 2 жыл бұрын
не поможем
@ДобрыйЧел-г4у
@ДобрыйЧел-г4у 2 жыл бұрын
@@samratshaxmerdenov8186 а я разобрался
@samratshaxmerdenov8186
@samratshaxmerdenov8186 2 жыл бұрын
@@ДобрыйЧел-г4у Машина
@ИгнатовБорис
@ИгнатовБорис 2 жыл бұрын
Есть баг: если зажать кнопку в воздухе игрок вновь прыгнет от платформы когда приземлится - нужна проверка какая-нибудь. И с этой штукой не получается контролировать время прыжка, так что хз. Сижу теперь, довожу до ума код) p.s. Сделал по иной схеме со всеми фиксами, кому интересно, кину код
@dimockwin730
@dimockwin730 2 жыл бұрын
Скинь пж у меня такой же баг
@utilizatorogur4ikov
@utilizatorogur4ikov 2 жыл бұрын
и мне тоже нужно
@kelafac6261
@kelafac6261 10 ай бұрын
Ты сделал всё очень хреново, любой скажет что низя менять бездумно настройки в Physycs, во вторых, расчёты по времени делаются через короутину, твой расчёт сейчас зависит от кол-ва кадров, в третьих у меня идёт кровь с глаз, зачем переменные над методом каждым объявлять? ты маньяк? :D Тебе стоит указать в начале видео что это не обучалка, а просто твоё видение что ли, потому что такому учить низя
@NoobGameDev
@NoobGameDev 10 ай бұрын
Полностью согласен)) Видео чёрти когда сделано было) И я никогда не претендовал на истину в первой инстанции, всегда говорил, что не являюсь профессионалом и даже в шапке канала и в описании указано, что я любитель) Мне самому порой больно смотреть старые видео)) Но прежде чем удалять это, нужно сделать новое - всё никак не доберусь. Ну, и я тоже пришёл к выводу, что в начале каждого видео нужен дисклеймер)
@bogdan9423
@bogdan9423 2 ай бұрын
​@@NoobGameDev Новые делай, но старые удалять не надо. Во первых, это ностальгия) А во вторых, в них другой полезной информации полно. А вот ошибки, такие как зависимость от кадров можно бы и исправить. Во всяком случае спасибо большое за такие полезные видео!
#11 - Карабканье и прыжок от стены
13:23
Noob Game Dev
Рет қаралды 11 М.
The Best Band 😅 #toshleh #viralshort
00:11
Toshleh
Рет қаралды 22 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Как сделать БОССА в Unity | by Brackeys
20:35
maxvell-game developer
Рет қаралды 20 М.
Узнай, Как Создать Уникальную Динамичную Камеру в Unity!
15:51
Начальная кат сцена / Cut scene - Unity легко
14:22
#12 - Взбирание на уступы (Ledge Climb)
24:23
Noob Game Dev
Рет қаралды 9 М.
Правила хорошего платформера
6:11
GDev Academy
Рет қаралды 63 М.
The Best Band 😅 #toshleh #viralshort
00:11
Toshleh
Рет қаралды 22 МЛН