Не работает прыжок в юнити

Рейтинг: 0Ответов: 1Опубликовано: 28.05.2023

Я делаю скрипт по туториалу и у меня получился такой скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public Rigidbody rigb;

    public float leftright=500f;
    public float speed=100f;
    public float highjump=15f;

    protected bool left=false;
    protected bool right=false;
    protected bool jump=false;

    // Update is called once per frame
    void Update()
    {
        left=Input.GetKey("a");
        right=Input.GetKey("d");
        jump=Input.GetKeyDown("space");
        if (transform.position.y<-5f)
        {
            Debug.Log("Конец игры");
        }
    }

    void FixedUpdate(){ 
        rigb.AddForce(0,0,speed*Time.deltaTime);
        if (left){
            rigb.AddForce(-leftright*Time.deltaTime,0,0,ForceMode.VelocityChange);
        }

        if (right){
            rigb.AddForce(leftright*Time.deltaTime,0,0,ForceMode.VelocityChange);
        }

        if (jump){
            rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
            jump=false;
            }
        }
    }
}

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

Ответы

▲ 1

Переменная jump = false, поэтому ты и не можешь прыгать, и устанавливает значение false, и не меняет его обратно когда игрок "приземлился". Получается так, что когда ты прыгаешь, ты меняешь значение и больше не можешь прыгать.

if (jump)
{
  rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
  jump=false;
}

Меняй значение на true когда объект будет "на земле".

Что-то типо такого:

if (jump)
{
  rigb.AddForce(Vector3.up*highjump,ForceMode.Impulse);
  jump=false;
} 
else if(!jump && transform.position.y == groundPosY)
{
  jump = true;
}