Unity2D как ограничить прыжок игрока - PullRequest
0 голосов
/ 21 июня 2020

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

public float downForce;
public float speed;

public int playerHp;

public Text healthText;

Rigidbody2D rb;

CharacterController controller;

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

// Update is called once per frame
void Update()
{
    healthText.text = playerHp.ToString();
    if (Input.GetMouseButtonDown(0))
    {
        Jump();
    }

    if (playerHp < 0)
    {
        Destroy(this.gameObject);
        SceneManager.LoadScene("GameOver");
    }
}

public void Jump()
{
    rb.AddForce(Vector2.up * downForce + Vector2.right * speed, ForceMode2D.Impulse);
    rb.isKinematic = false;
}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Я до сих пор не могу отвечать на комментарии, поэтому отправлю его здесь

Использование IEnumerator похоже на любую другую функцию

вы помещаете его в свой код, а затем вызываете разница в том, что когда вы вызываете его, вы добавляете

StartCoroutine (MethodName ());

, и он запускает первую часть кода - затем подождите в течение указанного вами времени, затем он запустит вторую часть кода

0 голосов
/ 21 июня 2020
public Button BTN;
public float btnDelay = .5f;

this, чтобы получить ссылку на кнопку и указать продолжительность

coroutine = ButtonDelayed(btnDelay);
StartCoroutine(coroutine);

this после вызова Jump(); в своем обновлении или в Jump()

IEnumerator ButtonDelayed(float delay)
{
BTN.interactable = false;
yield return new WaitForSeconds(delay);
BTN.interactable = !BTN.interactable;
}

this где-то. Просто быстрый макет. Не уверен, получится ли исключение. Если у вас возникла проблема, просто свяжитесь со мной.

РЕДАКТИРОВАТЬ: Я забыл сказать вам изменить цвет отключенного состояния в инспекторе на цвет, который у вас есть при взаимодействии с кнопкой. В противном случае вы увидите, что кнопка меняет цвета.

EDIT2: обновлен полный скрипт

public float downForce;
public float speed;   
public int playerHp;   
public Text healthText;

Rigidbody2D rb;    
CharacterController controller;

public Button BTN;
public float btnDelay = .5f;

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

void Update()
{
    healthText.text = playerHp.ToString();
    if (Input.GetMouseButtonDown(0))
    {
        Jump();
    }

    if (playerHp < 0)
    {
        Destroy(this.gameObject);
        SceneManager.LoadScene("GameOver");
    }
}

public void Jump()
{
    coroutine = ButtonDelayed(btnDelay);
    StartCoroutine(coroutine);
    rb.AddForce(Vector2.up * downForce + Vector2.right * speed, 
    ForceMode2D.Impulse);
    rb.isKinematic = false;
}

IEnumerator ButtonDelayed(float delay)
{
    BTN.interactable = false;
    yield return new WaitForSeconds(delay);
    BTN.interactable = !BTN.interactable;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...