Как сделать прыжок в unity 2d

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

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

speed - скорость движения, как не странно.

addForce - если выбран режим Оnly X, будет использовано для прыжка, при нажатии соответствующий клавиши. Во втором режиме, значение addForce будет прибавлено к speed, тем самым придавая ускорение.

lookAtCursor - отслеживание позиции курсора, персонаж будет вращаться по оси Z. Важно помнить, что лицом считается ось Х.

isFacingRight - если на старте сцены персонаж смотрит вправо, то надо ставить true.

При движении только по горизонтали, разворот персонажа осуществляется через функцию Flip. Так же, чтобы прыжок был возможен, все объекты по которым возможно передвижение, как бы земля/поверхность, у всех них должен быть тег Ground.

Георгий Коровин


Георгий Коровин

Виктор,
public float jumpSpeed=30;
Transform transform;
void Start()Rigidbody rb=GetComponent ();
Показать полностью.
transform=transform;
>
void FixedUpdate() if(Input.GetKey(KeyCode.Space)
rb.AddForce(transform.up*jumpSpeed,ForceMode.Impulse);
>
>

итого каждый тик если нажат пробел прибавляется импульс. надо делать проверку GetKeyDown в таком случае

Сергей Фурсов

Георгий Коровин


Георгий Коровин

Сергей Фурсов

Георгий Коровин


Георгий Коровин ответил Сергею

Сергей Фурсов

Сергей Фурсов

Часть кода
if (Input.GetButtonDown("Jump"))
<
Ray ray = new Ray(transform.position, Vector3.down);
RaycastHit hit;
Показать полностью.
if (Physics.Raycast(ray, out hit, 0.55f))
<
motor.Jump(JumpForce);
>
>

реализует прыжок
строка
if (Input.GetButtonDown("Jump")
делает фиксацию нажатия клавиши один раз
Часть кода
Ray ray = new Ray(transform.position, Vector3.down);
RaycastHit hit;
посылает лучь вниз.
if (Physics.Raycast(ray, out hit, 0.55f))
<
motor.Jump(JumpForce);
>
в этом условии проверяется нет ли столкновения луча с поверхностью под играком.
Сдесь полаагается что лучь пущени из точки 0.0.0 игрока, которая является его центром, а параметр Scale в трансформ объекта равен 1. тут я взяял не 0.5, а 0.55 f для большей точности.
и motor.Jump(JumpForce); реализует прыжок.
Эти два скрипта нужно повесить на один управляемый объект.
Логика там разделена, но их можно объединить и упростить.

Сергей Фурсов

После прыжка объект окажется в воздухе и повторное нажатие на прыжок - КЛ ПРОБЕЛ - снова вызовет эту часть кода, будет послан лучь в пол, но так как мы в воздухе лучь не коснется ничего и функция motor.Jump(JumpForce); не вызовется и соотв. не будет повторного импульса и полета в воздухе

Георгий Коровин


Георгий Коровин ответил Сергею

Георгий Коровин


Георгий Коровин ответил Сергею

Сергей Фурсов

Луч используется для проверки стоишь ты на земле или нет, все перемещения там на физике завязаны.
Вещай два скрипта на объект, на объект повесь твердое тело, а в сам объект засунь камеру. Приладь все это к скриптам.

Всем привет, делюсь с вами уроком по созданию прыжка для персонажа в Unity. В этом видео показано как сделать плавный и настраиваемый прыжок, а так же приведено некоторое физическое обоснование используемых формул, так что будет интересно! Смотрите это и остальные видео по созданию персонажа)

Клиенты GeekBrains подали коллективный иск к платформе из-за отказов возвращать деньги за курсы Статьи редакции

Компания ссылается на внутренние правила оферты, но они противоречат закону, считают юристы.

Салют, на связи команда SberDevices! Объявляем первый в году One Day Offer. На этот раз мы приглашаем автоматизаторов тестирования уровня Middle/Senior, которые специализируются на UI-тестах для девайсов на Android. Также ищем QA-инженеров по тестированию backend’а виртуальных ассистентов Салют. Работа ответственная и масштабная — вас ждут…

Что такое дизайн в корпоративно-инвестиционном банкинге – на примере приложения Райффайзен Бизнес Плюс

Всем привет, меня зовут Никита Маврин и я продуктовый дизайнер в команде корпоративных цифровых каналов в Райффайзен Банке. Расскажу о том, как мы разрабатывали дизайн первого мобильного банка для руководителей большого бизнеса. А ещё о том, почему дизайнеру классно развиваться в корп-инвест банкинге.

Всем добра! Рад видеть на этой странице) Сегодня, я попытаюсь объяснить, каким образом можно реализовать прыжок в Unity 3D, которую все мы так любим. Делать мы это будем на примере 2D проекта, однако для 3D мало что будет отличаться.

Итак, для начала определимся с тем что у нас будет в итоге. Персонаж будет работать по физике, то-есть на нем будет компонент RigidBody2D. Прыжок будем делать одиночный, если вам нужен двойной прыжок, можно будет разобрать его в следующей статье. Собственно больше ни чего не будет, дабы не отвлекаться ни на что кроме прыжка.

Настройка сцены для прыжков

Думаю наш 2D персонаж будет выглядеть сегодня как то так.

Как сделать прыжок на Unity 3D

Персонаж из еще не вышедшей игры)

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

Как сделать прыжок на Unity 3D

С землей как то веселее!

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

На персонажа нужно повесить компонент RidgidBody2D и, к примеру, BoxCollider2d. А на землю только BoxCollider2D.

Как сделать прыжок на Unity 3D

Коллайдер нужно растянуть на всю поверхность

Как сделать прыжок на Unity 3D

так же и на персонаже

Компоненты на персонаже компонент на земле

Земле нужно дать ТЕГ "ground", что-бы отличать от чего мы прыгаем.

Как сделать прыжок на Unity 3D
Как сделать прыжок на Unity 3D
Как сделать прыжок на Unity 3D

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

Отлично! Теперь разберем алгоритм прыжка.

Все просто, ни так ли? Но как определить на земле-ли персонаж, спросите вы?

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

Добавим на игрока еще один коллайдер и поставим галочку isTrigger. И перейдем, пожалуй, к скрипту.

Как сделать прыжок на Unity 3D

триггер нужно разместить под персонажем и не забыть про галочку is Trigger!

Скрипт

Теперь, если запустить игру в редакторе, то можно попрыгать с помощью нажатий пробела! Великолепно! В Unity прыжок сделать совсем не сложно как оказалось))

На этом, урок можно завершить. Пишите, о чем еще хотели-бы прочитать на нашем сайте? И еще раз. Всем добра!)

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour <
>


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


public GameObject Player;
public Rigidbody ThisRigidpody;
public int speed = 5;
public int JumpSpeed = 8;
public bool Jumping;
public GameObject Platform;


Теперь будем, для передвижения влево и вправо, прибавлять позицию. Но тут ещё всё зависит от того, как вы поставите игрока (у меня игрок - циллиндр). У меня он смотрит вбок, значит, чтобы он шёл по бокам, нужно прибавлять и отнимать по forward'у. Делаем в "void Update()".


if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
<
Player.transform.position += Player.transform.forward * speed * Time.deltaTime;
>
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
<
Player.transform.position -= Player.transform.forward * speed * Time.deltaTime;
>


Итак. У нас всё ходит. Теперь сделаем прыжок. Мы просто придадим импульс ригидбоди игрока. Вот как это делается: " ThisRigidpody.AddForce(Player.transform.up * JumpSpeed, ForceMode.Impulse);".
Теперь давайте напишем условие.


if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow))
<
if (Jumping == false)
<
Jumping = true;
ThisRigidpody.AddForce(Player.transform.up * JumpSpeed, ForceMode.Impulse);
>
>


Мы проверяем, если булевая переменная "Jumping = false", то тогда можно прыгать. То есть придаётся импульс физическому телу.
Теперь давайте доделаем всё в проверке булевой переменной. Создадим новый метод. "void OnCollisionEnter(Collision collis)".


В методе мы проверяем, если коллизия, это платформа, то "Jumping = false". И снова можно прыгать.
Ну. Вроде всё.

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour <
public GameObject Player;
public Rigidbody ThisRigidpody;
public int speed = 5;
public int JumpSpeed = 8;
public bool Jumping;
public GameObject Platform;

Читайте также: