Контролируемый прыжок в 2D платформере

207
11 июня 2018, 02:10

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

isGround = Physics2D.OverlapBox(player.position + new Vector3(0, 0.01f, 0), new Vector2(0.065f, 0.01f), 0, LayerGround);
if (isGround && Input.GetKeyDown(KeyCode.Space)) { maxYpos = player.position.y + JumpHeight; isJump = true; }
if (player.position.y > maxYpos || Input.GetKeyUp(KeyCode.Space)) isJump = false;
if (isJump) rb.AddForce(new Vector2(0, JumpPower));
Answer 1

Введите параметр - время во время которого нажатие кнопки прыжок, добавляет силу.(MaxJumpTime) в дальнейшем лучше перевести её в MaxJumpHeight.

  [Header("Behavior")]
    public float JumpPower = 0.25f;
    public float MaxJumpTime = 0.25f;
    private float _StoreMaxTime;
    private bool jumping = false;
    private Rigidbody2D rb;
    [Header("Settings")]
    public LayerMask mask;
    public float CheckExstends;

    void Start () {
        rb = GetComponent<Rigidbody2D>();
        _StoreMaxTime = MaxJumpTime;
    }
    void Update () {
        var isGround = Physics2D.Raycast(transform.position, Vector3.down , 1 * CheckExstends, mask);

        if (isGround && Input.GetKeyDown(KeyCode.Space))
        {
            MaxJumpTime = _StoreMaxTime;
        }
        if (Input.GetKey(KeyCode.Space) && MaxJumpTime > 0)
        {
            MaxJumpTime -= Time.deltaTime;
            rb.AddForce(new Vector2(0, JumpPower),ForceMode2D.Impulse);
        }
        if (Input.GetKeyUp(KeyCode.Space) && !isGround)
        {
            MaxJumpTime = -1;
        }
    }
    private void OnDrawGizmosSelected()
    {
        Gizmos.DrawLine(transform.position, transform.position + (Vector3.down * CheckExstends));
    }

Из редактора, надо

  • Обновить слой, чтобы соответствовал слою земли.

  • Выставить значение CheckExstends (Gizmo - бела линия в окне редактора) Это проверка на касание с землей. Линия должна едва выходить за пределы объекта.

READ ALSO
Подвинуть image относительно родительской image в сторону (healthBar) Unity 2d c#

Подвинуть image относительно родительской image в сторону (healthBar) Unity 2d c#

Нужно реализовать healthBar двигая дочерний зеленый прямоугольник по отношению к красному родительскому

161
Создание объекта при помощи рефлексии

Создание объекта при помощи рефлексии

Хочу узнать, как с помощью рефлексии создать объект класса, у которого явно прописан конструкторПредположим есть класс Student:

222
Внешнее левое соединение c# LINQ [закрыт]

Внешнее левое соединение c# LINQ [закрыт]

Как с помощью этого средства сделать дозапись данных в Json:

238
DateTimePicker сравнение двух дат

DateTimePicker сравнение двух дат

Есть два DateTimePicker'a

160