Проблема с двойным прыжком на Unity

152
15 ноября 2019, 06:30

у меня есть проблема с игрой на Unity. Я решил сделать небольшую игру типа платформера, есть проблема с прыжком, если очень много раз нажимать на кнопку прыжка он просто просто улетает вверх(прыгает по воздуху), нужно это как-то исправить.

Вот сам код.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Her : MonoBehaviour
{

    Rigidbody2D rb;
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
                if (Input.GetKeyDown(KeyCode.UpArrow))
                {
                    jump();
                }
    }
        void FixedUpdate()
        {
            rb.velocity = new Vector2(Input.GetAxis("Horizontal") * 12f, rb.velocity.y);
        }

    void OnCollisionEnter2D(Collision2D p)
    {
        if (p.gameObject.tag == "ReloadLevel")
        {
            RestartLevel();
        }
    }

        void RestartLevel()
    {
        Application.LoadLevel(Application.loadedLevel);
    }
        void jump()
    {
        rb.AddForce(transform.up * 12f, ForceMode2D.Impulse);
    }
}
Answer 1

В комментарии написали, что можно добавить проверку коллизии с поверхностью (стоит ли персонаж на земле), но проблема иногда все равно будет заметна, особенно если персонаж будет бегать и прыгать на неровной поверхности. Пусть обьект, который будет прыгать будет называтся Person, а вспомогательный обьект будет называтся JumpTracker. Для того, что бы решить проблему нужно добавить обьект JumpTracker и расположить его прямо на грани, где будет Person встречатся с землей. Обьект JumpTracker нужно в 2-4 раза меньше, чем обьект Person (высота y, ширина x, глубина z), также добавить на него коллайдер и поставить галочку isTrigger. Нужно создать скрипт JumpTrackerScript, где будет метод OnTriggerStay(collider collider) (или как там) и if (collider.gameObject.transform.tag == "ground") { isGround = true; } Как-то так, возможно много неточностей с моей стороны.

Answer 2

Если заглянуть в этот вопрос: Правильная реализация передвижения персонажа

можно увидеть интересную реализацию проверки IsGrounded через

private bool _isGrounded
{
    get {
        var bottomCenterPoint = new Vector3(_collider.bounds.center.x, _collider.bounds.min.y, _collider.bounds.center.z);
        //создаем невидимую физическую капсулу и проверяем не пересекает ли она обьект который относится к полу
        //_collider.bounds.size.x / 2 * 0.9f -- эта странная конструкция берет радиус обьекта.
        // был бы обязательно сферой -- брался бы радиус напрямую, а так пишем по-универсальнее
        return Physics.CheckCapsule(_collider.bounds.center, bottomCenterPoint, _collider.bounds.size.x / 2 * 0.9f, GroundLayer);
        // если можно будет прыгать в воздухе, то нужно будет изменить коэфициент 0.9 на меньший.
    }
}

если нужен 2йной прыжок нужно сделать так же, только с задержкой между прыжками во времени. Что бы нельзя было зажать кнопку прыжка и взлетать. То есть проверяем на isGrounded, делаем прыжок если все ок и засекаем время до следующего возможного прыжка. А после второго прыжка делать возможным только снова по IsGrounded.

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

READ ALSO
Кастомный шрифт 2

Кастомный шрифт 2

Нашёл ответ на свой вопрос, вродь) Вот https://stackoverflowcom/questions/1297264/using-custom-fonts-on-a-label-on-winforms

144
Ошибка CS0122. C# is inaccessible due to its protection level

Ошибка CS0122. C# is inaccessible due to its protection level

Не могу понять почему не создаётся объект классаОба класса объявлены в одном пространстве имён

309
Разрешить inline-style по &ldquo;белому списку&rdquo;

Разрешить inline-style по “белому списку”

На своём сайте я использую Mathquill, который для корректного изображения встраивает стили в код страницыНапример:

106
Wordpress, вопрос-ответ [закрыт]

Wordpress, вопрос-ответ [закрыт]

Как можно сделать функционал, похожий на комментарии, но это будет вопрос-ответ вместо комментария? те

100