Как убрать двойной прыжок unity
Помогите убрать бесконечные прыжки в unity с#
Помогите пожалуйста, создаю свою первую игру 2д с этим скриптом не могу убрать бесконечные прыжки и idl сам поворачивается только в одну сторону,
Using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; //для работы с ценами!
public class idle : MonoBehaviour <
Rigidbody2D rb;
Animator anim;
int Life = 3; // жизни
void Start () <
rb = GetComponent ();
anim = GetComponent ();
>
void Update () <
if (Input.GetKeyDown (KeyCode.Space)) <
pipirka (); //метод наш метод прышка
>
if (Input.GetAxis («Horizontal») == 0 ) <
anim.SetInteger («popka», 1);
> else <
//Flip (); //поворот героя, когдаидет в другую сторону
anim.SetInteger («popka», 2); //если стоит то анимация стоя, бежит анимация ьега
>
void OnTriggerEnter2D(Collider2D shit) < // оживляет
if (shit.gameObject.tag == «life») < // проверка столкновения
Life++;
Destroy (shit.gameObject);// убрать обьект после сьедания
>
if (shit.gameObject.tag == «Finich») <
Application.LoadLevel («Scene2»);
>
>
void OnCollisionEnter2D(Collision2D shit) < //убивает
if (shit.gameObject.tag == «pipka») < // проверка столкновения
Invoke(«ReloaderFuckingLevel», 2);
Life—;
void OnGUI() <
GUI.Box (new Rect (0, 0, 100, 30), «Life = » + Life);
>
void ReloadFuckingLevel() <
Application.LoadLevel (Application.loadedLevel);
>
void Flip() <
if (Input.GetAxis («Horizontal») Голосование за лучший ответ
Прыжки:
— добавить глобальную переменную: bool grounded = true;
— в update() поменять:
if (Input.GetKeyDown (KeyCode.Space)) <
на
if (Input.GetKeyDown (KeyCode.Space) && grounded ) <
— добавить в FixedUpdate ()
grounded = Mathf.Approximately ( rb.velocity.y, 0f );
не лучший способ, но универсальный. Поскольку я не вижу что за игра, и как выглядит, то ничего лучшего предложить не рискну.
Проблема с двойным прыжком на Unity
у меня есть проблема с игрой на Unity. Я решил сделать небольшую игру типа платформера, есть проблема с прыжком, если очень много раз нажимать на кнопку прыжка он просто просто улетает вверх(прыгает по воздуху), нужно это как-то исправить.
2 ответа 2
В комментарии написали, что можно добавить проверку коллизии с поверхностью (стоит ли персонаж на земле), но проблема иногда все равно будет заметна, особенно если персонаж будет бегать и прыгать на неровной поверхности. Пусть обьект, который будет прыгать будет называтся Person, а вспомогательный обьект будет называтся JumpTracker. Для того, что бы решить проблему нужно добавить обьект JumpTracker и расположить его прямо на грани, где будет Person встречатся с землей. Обьект JumpTracker нужно в 2-4 раза меньше, чем обьект Person (высота y, ширина x, глубина z), также добавить на него коллайдер и поставить галочку isTrigger. Нужно создать скрипт JumpTrackerScript, где будет метод OnTriggerStay(collider collider) (или как там) и if (collider.gameObject.transform.tag == «ground») < isGround = true; >Как-то так, возможно много неточностей с моей стороны.
можно увидеть интересную реализацию проверки IsGrounded через
если нужен 2йной прыжок нужно сделать так же, только с задержкой между прыжками во времени. Что бы нельзя было зажать кнопку прыжка и взлетать. То есть проверяем на isGrounded, делаем прыжок если все ок и засекаем время до следующего возможного прыжка. А после второго прыжка делать возможным только снова по IsGrounded.
Так же нужно реализовать счетчик прыжков что бы нельзя было всегда летать. То есть 2 прыжка, а потом уже не прыгать пока персонаж не попадет снова на землю.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# unity3d или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.22.41046
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Проблема с двойным прыжком на Unity
у меня есть проблема с игрой на Unity. Я решил сделать небольшую игру типа платформера, есть проблема с прыжком, если очень много раз нажимать на кнопку прыжка он просто просто улетает вверх(прыгает по воздуху), нужно это как-то исправить.
Ответы (2 шт):
В комментарии написали, что можно добавить проверку коллизии с поверхностью (стоит ли персонаж на земле), но проблема иногда все равно будет заметна, особенно если персонаж будет бегать и прыгать на неровной поверхности. Пусть обьект, который будет прыгать будет называтся Person, а вспомогательный обьект будет называтся JumpTracker. Для того, что бы решить проблему нужно добавить обьект JumpTracker и расположить его прямо на грани, где будет Person встречатся с землей. Обьект JumpTracker нужно в 2-4 раза меньше, чем обьект Person (высота y, ширина x, глубина z), также добавить на него коллайдер и поставить галочку isTrigger. Нужно создать скрипт JumpTrackerScript, где будет метод OnTriggerStay(collider collider) (или как там) и if (collider.gameObject.transform.tag == «ground») < isGround = true; >Как-то так, возможно много неточностей с моей стороны.
можно увидеть интересную реализацию проверки IsGrounded через
если нужен 2йной прыжок нужно сделать так же, только с задержкой между прыжками во времени. Что бы нельзя было зажать кнопку прыжка и взлетать. То есть проверяем на isGrounded, делаем прыжок если все ок и засекаем время до следующего возможного прыжка. А после второго прыжка делать возможным только снова по IsGrounded.
Как решить двойной прыжок
2 ada dudu [2016-09-07 01:41:00]
Я следил за учебником Unity для «Roll-A-Ball» и добавил некоторые расширения. Мяч теперь может прыгать, но он прыгает слишком много раз каждый прыжок; Я просто хочу, чтобы мяч один раз в то время, когда я нажимаю на SPACE. Теперь я могу нажать SPACE 3 раза, и он будет прыгать все выше и выше.
Попробовали немного изменить код, но теперь я могу ТОЛЬКО прыгать один раз (первый раз)
3 ответа
0 Решение ada dudu [2016-09-24 20:01:00]
Я нашел решение. Решение состоит в том, чтобы добавить OnCollisionEnter где вы можете справиться с тем, что произойдет, когда игрок столкнется с землей. Кроме того, я добавил счетчик, который установлен на 0, когда игрок прыгает и 0 снова, когда он сталкивается с землей.
Счетчик установлен в 0 здесь:
Это может немного успеть (поскольку это не пошаговое руководство, а схема).
Вы должны проверить, когда мяч достигает пола, проверяя, достигает ли скорость когда-либо 0 или выше после первого нажатия. После этого установите bool (здесь с именем CanJump ) в true (или независимо от того, что определяет ваш язык для true).
Есть еще несколько проверок, которые нужно сделать; когда CanJump установлен в true (потому что ваша скорость теперь >= 0 ), установите также переменную int, называемую NumJumps 0. И увеличивайте ее каждый прыжок. Таким образом, вы можете установить CanJump на false после двух прыжков, что предотвращает прыжок мяча.
Обратите внимание: я ничего не знаю о Unity 3D, но у меня есть куча опыта в 3D-играх (например, Unreal Engine 1 и, таким образом, в моделях UT99).
Я нашел, что лучшим решением является использование Raycast.
Замените 1.875f расстоянием между вашим происхождением персонажа и землей, плюс немного больше. Затем вы можете проверить isOnGround когда решаете, произойдет ли переход или нет.
Как сделать прыжок на Unity 3D
Всем добра! Рад видеть на этой странице) Сегодня, я попытаюсь объяснить, каким образом можно реализовать прыжок в Unity 3D, которую все мы так любим. Делать мы это будем на примере 2D проекта, однако для 3D мало что будет отличаться.
Итак, для начала определимся с тем что у нас будет в итоге. Персонаж будет работать по физике, то-есть на нем будет компонент RigidBody2D. Прыжок будем делать одиночный, если вам нужен двойной прыжок, можно будет разобрать его в следующей статье. Собственно больше ни чего не будет, дабы не отвлекаться ни на что кроме прыжка.
Настройка сцены для прыжков
Думаю наш 2D персонаж будет выглядеть сегодня как то так.
Хм, персонаж есть, нужна поверхность по которой он будет прыгать. Да, ходить в этом уроке мы его учить не будем, и так сойдет, как говориться) Однако, это не сложно, и если кому то интересно, то можно написать статью и на эту тему.
С землей как то веселее!
Вроде-бы выглядит не плохо. Но если сейчас запустить игру то ни чего не будет происходить. Нужно ведь развесить коллайдеры и риджидбоди. Сделаем это.
Земле нужно дать ТЕГ «ground», что-бы отличать от чего мы прыгаем.
Ну вот, теперь если запустить игру, то все так-же ничего не произойдет, но теперь объекты на сцене подвержены физике.
Отлично! Теперь разберем алгоритм прыжка.
Все просто, ни так ли? Но как определить на земле-ли персонаж, спросите вы?
Для этого нужно добавить на персонажа триггер, который будет реагировать на землю и сообщать нам, что мы приземлились.
Добавим на игрока еще один коллайдер и поставим галочку isTrigger. И перейдем, пожалуй, к скрипту.
триггер нужно разместить под персонажем и не забыть про галочку is Trigger!
Скрипт
В Unity прыжок можно сделать так. Даем игроку пинок вверх и он летит! Если быть точнее, то в определенный момент нужно приложить к игроку вертикальную силу с типом Impuls. Далее будет скрипт с пояснениями. Создаем скрипт C# и бросаем его на игрока.
Теперь, если запустить игру в редакторе, то можно попрыгать с помощью нажатий пробела! Великолепно! В Unity прыжок сделать совсем не сложно как оказалось))
На этом, урок можно завершить. Пишите, о чем еще хотели-бы прочитать на нашем сайте? И еще раз. Всем добра!)