Как сделать проверку что персонаж стоит на земле?

Привет всем! Не получается сделать чтобы персонаж не делал двойной прыжок(не было постоянных прыжков)
Пробовал сделать проверку на теги, через рейкаст, но ничего не помогает, по этому решил обратиться за советом.

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

public class HeroScript : MonoBehaviour
{

    public float horizontalSpeed;
    float speedX;
    public float verticalimpulse;

    public LayerMask groundLayer;


    Rigidbody2D rb;

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

        
        Vector2 position = transform.position;
        Vector2 direction = Vector2.down;
        float distance = 1.0f;
        Debug.DrawRay(position, direction, Color.black);
        RaycastHit2D hit = Physics2D.Raycast(position, direction, distance, groundLayer);
        if (hit.collider != null)
        {
            return true;
        }

        return false;
    }




    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.A))
        {
            speedX = -horizontalSpeed;
            transform.localScale = new Vector3(-1, 1); //Персонаж смотри в ту сторону, куда нажал игрок

        }
        else if (Input.GetKey(KeyCode.D))
        {
            speedX = horizontalSpeed;
            transform.localScale = new Vector3(1, 1); //Персонаж смотри в ту сторону, куда нажал игрок
        }
        

        if (Input.GetKeyDown(KeyCode.Space))
        {
            Jump();  
        }
        transform.Translate(speedX, 0, 0);
        speedX = 0;
    }
    void Jump()
    {
        if (!IsGrounded())
        {
            return;
        }
        else
        {
            rb.AddForce(new Vector2(0, verticalimpulse), ForceMode2D.Impulse);
        }
    }
}
  • Вопрос задан
  • 863 просмотра
Пригласить эксперта
Ответы на вопрос 1
CHIDWI
@CHIDWI
Unity3D Developer
bool isJump;

private void Update()
{
        if (Input.GetKeyDown("space") && !isJump) //проверка на нажатие кнопки и не находимся ли мы в прыжке сейчас
        {
//вызываем прыжок AddForce или что там у вас.
            isJump = true; //помечаем флаг, что мы прыгнули
        }
}

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "ground") //проверка что обьект столкновения имеет тег ground
        {
            isJump = false; //помечаем что мы столкнулись с землёй и можем снова прыгать
        }
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы