скрипт на прыжок 2d персонажа в unity

Unity 2d jumping script

Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

3 Answers 3

The answer above is now obsolete with Unity 5 or newer. Use this instead!

I also want to add that this leaves the jump height super private and only editable in the script, so this is what I did.

This makes it to where you can edit the jump height in Unity itself without having to go back to the script.

скрипт на прыжок 2d персонажа в unity. photo. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-photo. картинка скрипт на прыжок 2d персонажа в unity. картинка photo. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Use Addforce() method of a rigidbody compenent, make sure rigidbody is attached to the object and gravity is enabled, something like this

See which combination and what values matches your requirement and use accordingly. Hope it helps

Not the answer you’re looking for? Browse other questions tagged c# unity3d physics or ask your own question.

Linked

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.1.40358

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Основы создания 2D персонажа в Unity 3D 4.3. Часть 3: прыжки (и падения)

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

Наша цель звучит просто, но в ее реализации будут некоторые тонкости. Во-первых, нам надо как-то определить, что персонаж находится в состоянии прыжка. Это будет немного сложнее, чем определение состояния бега. Во-вторых, нужно прикрутить соответствующую анимацию. Здесь мы могли бы поступить аналогично анимациям покоя и бега — циклично воспроизводить соответствующие кадры анимации, пока персонаж находится в состоянии прыжка. Но мы реализуем более гибкий вариант. Состояние прыжка на самом деле состоит из двух состояний: взлет и свободное падение. Кроме того, бывают частные случаи — только взлет и только падение. Если мы прикрутим одну общую анимацию для этих двух состояний (например, поджатые ноги и развевающийся на ветру плащ) — это может выглядеть нормально, но не совсем реалистично. В реальности, когда человек прыгает, положение его тела, рук, ног отличается при взлете и при падении. Мы создадим такую анимацию, которая будет учитывать скорость взлета/падения и в зависимости от нее переключать соответствующий кадр анимации.

Загрузим наш проект и сцену. В папке AssetsSprites у нас остался последний неиспользованный спрайт Jump. Проделаем с ним уже знакомую операцию по нарезке спрайта на коллекцию изображений. Затем в окне Hierarchy выберем Character и перейдем в окно Animation. Для прыжка нам понадобиться несколько файлов анимаций, а точнее — семь. Это равно числу кадров в спрайте Jump. Давайте создадим эти анимации, называя их Jump1, Jump2 и т.д.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Теперь добавим в каждую анимацию по одному изображению из спрайта Jump, по порядку: спрайт Jump_0 в анимацию Jump1, спрайт Jump_1 в анимацию Jump2

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

В окне Animator (не Animation!) у нас автоматически создались элементы для новых анимаций, но они нам теперь не понадобятся. Выделим их и удалим клавишей Delete (анимации также удалятся из соответствующего списка в окне Animation, но чуть позже мы их вернем). Создадим в Animator‘е два новых параметра: Ground с типом Bool и vSpeed с типом Float. Первый будет обозначать, находится ли персонаж на земле или в прыжке, а второй будет хранить текущее значение скорости персонажа по оси Y, то есть скорость взлета/падения. В зависимости от нее мы будем применять соответствующую анимацию из наших семи анимаций прыжка.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Теперь кликнем правой кнопкой по любому свободному месту в окне Animator и выберем Create StateFrom New Blend Tree. В окне Inspector переименуем созданный элемент как Jump.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Теперь кликнем дважды по Jump. Откроется элемент Blend Tree. В него мы добавим наши семь анимаций прыжка, а переключение между ними будут происходить в зависимости от значения параметра vSpeed. По умолчанию в Blend Tree сейчас установлен параметр Speed — поменяем его на vSpeed в окне Inspector.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

В этом же окне нажмем на плюсик и выберем Add Motion Field. Это нужно проделать семь раз. Создадутся семь полей для наших семи анимаций. Снимем флаг Automate Thresholds, чтобы можно было вручную устанавливать значения параметра vSpeed, при достижении которых будет производиться смена анимации в Blend Tree. Перетащим в каждое поле по анимации и зададим значения vSpeed. Вот что должно получиться (кстати, после этих действий удаленные из списка в окне Animation анимации Jump1Jump6 вновь появятся):

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

С анимацией пока закончим. Теперь нам надо научится определять, когда персонаж находится на земле, а когда — в воздухе, то есть в прыжке. Перейдем в окно Scene. Создадим пустой игровой объект, назовем его GroundCheck. Выделяем его в окне Hierarchy и перетаскиваем мышью на Character (все в том же окне Hierarchy!). Теперь объект GroundCheck будет дочерним по отношению к Character и будет перемещаться вместе с ним, а объект Character приобретет соответствующую стрелку, скрывающую дочерние объекты. Кликнем по стрелке и вновь выберем объект GroundCheck. Назначим ему иконку, чтобы видеть объект на сцене. На скриншоте я указал, как это сделать:

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

В окне Scene переместим GroundCheck в ноги персонажа. Тем самым, мы сделали объект, который будет использован для определения нахождения персонажа на земле.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Теперь нам надо определить, а что же является землей? Очевидно, это наша платформа, но игра об этом пока не знает. Кстати, давайте создадим копию платформы для тестирования прыжка (лучшим способ будет создание префаба на основе платформы, но сейчас давайте просто выделим Platform и нажмем Ctrl+D). Разместим вторую платформу правее и выше первой.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Выделим любую из платформ и обратим внимание на верхнюю часть окна Inspector. Там есть поле Layer со значение Default. Оно обозначает принадлежность объекта к тому или иному слою. Кликнем на Default, выберем Add Layer, зададим в поле User Layer 8 имя Ground. Снова выделим платформу, и вместо слоя Default установим слой Ground. Для второй платформы тоже установим слой Ground.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Таким образом мы определили, что наши платформы будут землей. Объект GroundCheck будет проверяться на предмет пересечения с объектами слоя Ground, т.е. с нашими платформами. Если будет обнаружено пересечение — персонаж находится на земле. Делаться это будет в скрипте CharacterControlleScript, созданном в предыдущей части. Давайте откроем его на редактирование.

В начало скрипта добавим новые переменные в добавок к уже существующим:

А в начало метода FixedUpdate следующие строки:

Теперь добавим в скрипт метод Update, в котором будем обрабатывать нажатие клавиши прыжка. Мы будем делать это в методе Update для большей точности управления — этот метод вызывается каждый фрейм игры, в отличии от FixedUpdate, который вызывается через одинаковое определенное время и обычно, при хорошем FPS, вызовы происходят реже вызовов Update.

Итого, полностью скрипт будет выглядеть так:

Сохраняем скрипт, возвращаемся в Unity. В Hierarchy выделяем Character. Перетаскиваем объект GroundCheck в поле Ground Check скрипта CharacterControllerScript, а в поле What Is Ground устанавливаем Ground.

скрипт на прыжок 2d персонажа в unity. image loader. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-image loader. картинка скрипт на прыжок 2d персонажа в unity. картинка image loader. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Капитан Коготь умеет бегать и прыгать. При прыжке, в зависимости от состояния (взлет/падение) и от скорости применяется соответствующая анимация. На видео хорошо заметно, что при прыжке в окне Animator происходят переключения между анимациями в элементе Blend Tree. При этом, если персонаж просто падает с платформы (т.е. в прыжке нету фазы взлета, пробел не нажимался) — работают только те анимации, для переключения которых заданы отрицательные значения скорости, что делает поведение персонажа более реалистичным. Конечно, для лучшего эффекта необходимо больше анимаций и более тонкая настройка значений скорости.

Что ж, на этом все. Основа для 2D персонажа создана. Какие к ней прикрутить дополнительные возможности — зависит уже от конкретной игры. Спасибо за внимание!

Источник

Система управления в 2D платформерах

Конечно, когда мы говорим о жанре платформер, тем более в 2D играх, то система управления здесь реализуется на порядок проще, чем в более крупных 3D играх, к тому же, Unity предлагает множество уже готовых решений и все, что вам требуется – только правильно их использовать.

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

В этой статье попробуем рассмотреть один из примеров такой системы управления.

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

Система команд

скрипт на прыжок 2d персонажа в unity. 1 sozdaem novyj kanvas na scene. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-1 sozdaem novyj kanvas na scene. картинка скрипт на прыжок 2d персонажа в unity. картинка 1 sozdaem novyj kanvas na scene. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Создаем скрипт с перечислениями ActionType в котором будут находится команды.

Добавим в этот скрипт метод, через который будут поступать команды персонажу.

Дальше создадим персонажа на сцене.

скрипт на прыжок 2d персонажа в unity. 2 create char. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-2 create char. картинка скрипт на прыжок 2d персонажа в unity. картинка 2 create char. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Дальше кидаем скрипт Character на персонажа на сцене и возвращаемся к канвасу, где продолжим настраивать наши кнопки.

Так как мы не используем стандартные кнопки Button по причине того, что они могут отловить только событие нажатия, мы будем настраивать изображения через компонент EventTrigger, который позволяет отлавливать кучу других полезных действий.

скрипт на прыжок 2d персонажа в unity. 3 event trig. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-3 event trig. картинка скрипт на прыжок 2d персонажа в unity. картинка 3 event trig. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Поэтому нажимаем кнопку AddNewEventType в компоненте EventTrigger и ищем эти события, после чего добавляем их.

скрипт на прыжок 2d персонажа в unity. 4 event trig 2. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-4 event trig 2. картинка скрипт на прыжок 2d персонажа в unity. картинка 4 event trig 2. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

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

скрипт на прыжок 2d персонажа в unity. 5 event trig 3. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-5 event trig 3. картинка скрипт на прыжок 2d персонажа в unity. картинка 5 event trig 3. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Добавляем его в список действий.

скрипт на прыжок 2d персонажа в unity. 6 event trig 4. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-6 event trig 4. картинка скрипт на прыжок 2d персонажа в unity. картинка 6 event trig 4. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

После этого можно запустить и протестировать вызов команд в игре, нажатием на разные кнопки.

скрипт на прыжок 2d персонажа в unity. 7 console action. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-7 console action. картинка скрипт на прыжок 2d персонажа в unity. картинка 7 console action. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Обработка команд

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

Возвращаемся в скрипт Character, где для начала добавим несколько переменных: переменную направления directionRight, и переключатели onMoving и onMakeJump для движения и совершения прыжка.

Теперь переходим к методу OnDoAction, где разберем действия персонажа на поступившие команды.

Перед тем как выполнить эту команду, необходимо дополнительно проверить, стоит ли на “ земле ” наш персонаж. Для этого добавим простой коллайдер BoxCollider2D персонажу и настроим его.

скрипт на прыжок 2d персонажа в unity. 8 char collider. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-8 char collider. картинка скрипт на прыжок 2d персонажа в unity. картинка 8 char collider. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

В методе CheckGround будем проверять, находится ли персонаж на поверхности. Для этого проверим коллайдер персонажа на соприкосновение с землей.

Для этого используем позицию point и размер size коллайдера персонажа.

Далее методом Physics2D.OverlapBox проверим наличие поверхности под “ ногами ”.

Вот так наш персонаж будет обрабатывать поступающие команды от игрока, теперь можно переходить ко второй части статьи – к методам передвижения персонажа.

Физический движок Unity – это самостоятельная система обработки физических объектов и чем больше этих объектов будет на сцене? тем больше ресурсов уйдет на их обработку, так что для лучшей работы игры следует максимально минимизировать их кол-во.

Для персонажа выделим его главные требования: он должен четко взаимодействовать с окружением, которое состоит из коллайдеров, в первую очередь это пол и стены.

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

скрипт на прыжок 2d персонажа в unity. 9 fireball. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-9 fireball. картинка скрипт на прыжок 2d персонажа в unity. картинка 9 fireball. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Методы обработки

Для обработки движения двух разных типов объектов ( Transform и Rigidbody ) существует два разных метода Update и FixedUpdate – каждый из них используется для своих целей.

Общее у этих методов то, что они оба вызываются через определенное время, Update – каждый кадр, а FixedUpdate – каждый промежуток времени.

В первом случае метод Update вызывается столько раз, сколько позволяет частота кадров в игре, то есть если у вас частота к примеру 60 кадров в 1 секунду, значит, что и метод Update сработает 60 раз за 1 секунду.

Многие начинающие разработчики часто работают с Rigidbody в разных методах: ускоряют, замедляют их, придают им импульсы, бросают и так далее. Но с физическими телами рекомендуется работать именно в методе FixedUpdat. Даже если вы 10 раз измените позицию тела Rigidbody в том же методе Update или в любом другом методе, то все равно эти изменения вступят в силу только в момент вызова метода FixedUpdate, какая частота кадров у вас бы ни была.

В отличие от Transform’а у физического тела Rigidbody есть несколько способов перемещения.

Движение с ускорением

Теперь попробуем применить выбранный тип движения для персонажа, для этого вернемся в скрипт персонажа Character, где создадим новый метод FixedUpdate и пару переменных для перемещения: moveSpeed для скорости движения и jumpForce для силы прыжка.

Сначала определим, в какую сторону персонажу нужно совершать ускорение по оси X. Для этого с помощью переменной directionRight проверим направление персонажа, если ее значение true, значит ускорять объект нужно вправо с положительным значением, если же значение false, то будем ускорять объект влево с отрицательным значением.

Здесь ускорение по оси Y оставляем неизменным – персонаж сам будет обрабатывает вертикальное ускорение.

После проделанных действий наш персонаж сможет двигаться по горизонтали учитывая силу притяжения.

Чтобы проверить, добавим на сцену поверхность с коллайдером.

скрипт на прыжок 2d персонажа в unity. 10. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-10. картинка скрипт на прыжок 2d персонажа в unity. картинка 10. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

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

скрипт на прыжок 2d персонажа в unity. 11 zero friction. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-11 zero friction. картинка скрипт на прыжок 2d персонажа в unity. картинка 11 zero friction. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

скрипт на прыжок 2d персонажа в unity. 13 physic material screen. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-13 physic material screen. картинка скрипт на прыжок 2d персонажа в unity. картинка 13 physic material screen. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Перекинем физический материал в поле Material коллайдера поверхности и снова тестируем.

скрипт на прыжок 2d персонажа в unity. 14 more friztion. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-14 more friztion. картинка скрипт на прыжок 2d персонажа в unity. картинка 14 more friztion. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Изменяя коэффициент трения Friction физического материала можно добиться нужно результата движения по поверхности.

Импульс

Теперь займемся прыжком персонажа. Как было сказано выше, для совершения прыжка физическим телом, будем использовать метод AddForce который придаст объекту импульс движения по вертикали.

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

скрипт на прыжок 2d персонажа в unity. 15 gravity. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-15 gravity. картинка скрипт на прыжок 2d персонажа в unity. картинка 15 gravity. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

скрипт на прыжок 2d персонажа в unity. 16 physics 2d settings. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-16 physics 2d settings. картинка скрипт на прыжок 2d персонажа в unity. картинка 16 physics 2d settings. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Снова проверим результат.

скрипт на прыжок 2d персонажа в unity. 17. скрипт на прыжок 2d персонажа в unity фото. скрипт на прыжок 2d персонажа в unity-17. картинка скрипт на прыжок 2d персонажа в unity. картинка 17. Does anyone have a good jumping script for 2d games in unity? The code I have works but still is far from jumping, it looks like it is flying.

Заключение

Вот так легко и просто можно создать систему управления персонажем с помощью команды игрока. Теперь вы запросто сможете подключить к готовому персонажу анимации и добавить в игру другие объекты.

Источник

Полные версии кода будут находиться в конце поста.

В данном посте я напишу менеджер анимаций персонажа, и научу его прыгать и падать.

В прошлый раз мы остановились на том, что научили персонажа переходить от бега к состоянию покоя и наборот при помощи выбора номера анимации через animatorComponent в коде PlayerBehaviour.

Мы договорились, что при значении 1 мы прогрываем анимацию бега, при 0 персонаж находится в состоянии спокойствия.

Кратко объясню, как enum работает.

При помощи ключевого слова enum создаётся список. В котором, по-умолчанию, элементы нумеруются от нуля.

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

В нём я задал значение 42 для magicNumber, то есть при преобразовании magicNumber в int, результатом будет 42.

Если хотите, можете поиграть с кодом в специальном C# фиддле.

Используем enum для нашего менеджера анимаций.

Для этого создадим новый список AnimationState в PlayerBehaviour.

После этого можно обновить метод updatePlayerPosition + создадим метод setAnimationState, который и будет выбирать текущую анимацию.

Проверим, не поломали ли чего.

Все работает, ничего не поломано =)

Находим нужные нам спрайты по пути Assets/BayatGames/Free Platform Game Assets/Character/Character Animation ( Update 1.8 )/Jump/1x.png

Нарезаем, как делали это ранее.

Создаём анимации jump и fall, затем перетаскиваем их на игрока, чтобы они у нему привязались.

Не забудем проставить для обеих анимаций чекбокс на Loop Time.

К сожалению, в данном наборе ассетов есть всего два спрайта, которые нам подходят. Реализуем их.

Анимации созданы, переходим в Animator.

Создаём связи, как на скрине ниже.

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

Теперь проставляем условия для каждой связи.

Теперь зададим доп условия для новых значений в методе setAnimationState из скрипта PlayerBehaviour.

Проверяем работу скрипта.

Похоже, всё в порядке, анимации работают.

В следующий раз попробуем добавить сбор предметов и выведение счёта.

CameraBehaviour (в этой части не изменялся)

public float minY;

>public float maxY;
>public float minX;
>public float maxX;
Почему бы не создать два private вектора?

Источник

Продолжаем делать наш Unity for dummies платформер.

Полные версии кода будут находиться в конце поста.

Если вы не в курсе, как работают хуки жизненного цикла в Unity, вы можете ознакомиться с данной статьёй.

Создаём в панели ассетов C# cкрипт PlayerBehaviour, и запихиваем его в папку Scripts (её можно создать в той же панели ассетов).

Затем выбираем наш объект Player слева, в меню иерархии, и закрепляем инспектор (меню справа), нажав на замок в верхнем правом углу.

Пока закрываем все ненужные компоненты (Box Collider 2D, etc), нажимая на стрелочку у каждого из них.

Теперь перетаскиваем наш скрипт в инспектор, и он прикрепляется к объекту Player (если вы не выполнили предыдщуий пункт с закрепением меню, то вы этого сделать не сможете).

Если зайти в Edit => Project Settings => Input Manager, то мы можём увидеть настройки управления. Например, прыжок (Jump) назначен на пробел, в то время, как движение по горизонтали назначено на a, d, ←,→.

Запомним это для того, чтобы затем использовать в коде (названия инпутов Jump, Horizontal).

Пора покодить. Два раза нажимаем на наш скрипт PlayerBehaviour, и Unity отдаст его в руки Visual Studio.

Сохраняем файл, и переходим обратно в Unity. После того, как Unity проверит код (линтинг, ошибки, пустые переменные). Если что то неправильно, то вы увидите сообщение об ошибке.

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

Мне не нравится, что персонажа переворачивает. Исправим.

Заходим в инспектор, открываем Rigidbody2D и ставим галочку на Freeze Rotation Z.

Есть два основных способа научить камеру двигаться за персонажем.

1. Подвинуть камеру внутри сцены, чтобы она была на персонаже, а затем в привязать камеру к объекту персонажа через меню иерархии.

2. Задать движение камеры за персонажем програмно.

Создаём скрипт CameraBehaviour, и привязываем его к объекту Main Camera (добавляем через инспектор).

Открываем наш новый скрипт, и начинаем кодить (да, мне на работе не хватает, продолжаю и после).

Фиксируем объект камеры на замок в инспекторе, и перетаскиваем наш объект Player в GameObject.

Теперь камера двигается за игроком.

Однако камера постоянно вылезает за пределы уровня, показывая синий фон.

Я не уверен, что моё решение правильное. Буду рад, если кто-нибудь поделится своими соображениями на данный счёт.

Добавляем в наш скрипт CameraBehaviour следующий код:

Двигаем камеру, и снимаем наши измерения ее положений.

На скрине ниже камера стоит в левом нижнем углу сцены.

Проставляем снятые позиции для камеры (мои и ваши позиции будут отличаться).

Теперь обновим метод UpdateCameraPosition в скрипте CameraBehaviour

Отлично, камера перестала «гулять». Работаем дальше.

Выбираем наш Foreground, и создаём новый слой ‘Ground’ в инспекторе.

Снова тыкаем на Foreground, и выбираем в поле Layer наш только что созданный слой.

Добавим в PlayerBehaviour такую строчку.

Теперь в объекте Player мы можем выбрать наш свежесозданный слой.

Обновляем наш PlayerBehaviour. Добавим коллайдер (rigidBody мы создавали ранее).

Теперь мы можем обновить обработку перемещения персонажа в методе updatePlayerPosition

Летать мы разучились, а по платформе больше не скользим. Победа!

Я не уверен, что моё решение правильное. Буду рад, если кто-нибудь поделится своими соображениями на данный счёт

Привет.
Я, конечно, дохуя вовремя, когда у тебя уже пять статей и рефакторинг, но вот щас иду за тобой пока вот на этом месте.
Короче, в ассет-сторе есть проект 2D Game Kit от разрабов движка. Там движение камеры сделано буквально следующим образом, если помню (давно открывал). Уровень завёрнут в коллайдер, ещё один коллайдер на камере. Соответственно, когда она о него стукается, то расслабляется и не двигается. И ещё там угарный камера-лаг стоит, чтоб камера не жёстко следовала за персонажем, а как бы за верёвочку.

Привет.
Да, я изначально так и пробовал.
Но персонаж, почему-то, попросту исчезает при старте игры.
Попробую ради эксперимента новый проект создать.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *