Объект игрока автоматически прыгает при нажатии кнопки «Старт»

У меня есть холст, который инициализируется, когда я запускаю игру, и внутри него у меня есть меню с кнопкой воспроизведения и выхода. Игра представляет собой бесконечный раннер, и все работает нормально, но когда я нажимаю кнопку «Воспроизвести», чтобы начать игру, объект «Игрок» автоматически дает мне один прыжок, после этого все нормально, это похоже на то, когда я нажимаю кнопку «Воспроизвести». игра и игрок тоже одновременно. Мне нужно, чтобы это работало на устройстве Android.

Скрипт Player.cs

...

void Start () {
    Highscore = PlayerPrefs.GetInt ("Highscore", 0);
    jumpOne = false;
    jumpTwo = false;
    canDoubleJump = false;
}
void Update() {
    for (int i = 0; i < Input.touchCount; i++){
        if (Input.GetTouch(i).phase == TouchPhase.Began && isFalling == false) {
        jumpOne = true;
        canDoubleJump = true;
        isFalling = true;
        }else if (Input.GetTouch(i).phase == TouchPhase.Began && isFalling == true && canDoubleJump == true) {
        jumpTwo = true;
        canDoubleJump = false;
        }
    }
}

void FixedUpdate() {
    transform.Translate(Vector2.right * power * Time.deltaTime);
    if (jumpOne == true) {
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
        jumpOne = false;
    }
    if (jumpTwo == true) {
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight);
        jumpTwo = false;
    }
}

void OnCollisionStay2D(Collision2D coll) {
    if (coll.gameObject.tag == "Ground") {
        isFalling = false;
        canDoubleJump = false;
    }
}

...

//(кнопка воспроизведения)

public void ClickedStart() {
    MainMenu.SetActive(false);
    Time.timeScale = 1.0f;
    Playing = true;
}

Уже пробовали, проблема осталась (Input.GetMouseButtonDown(0))

(Input.GetKeyDown(KeyCode.Space)) Работает нормально и без ошибок, но я не могу прыгать в Android.


person せいのしん    schedule 29.02.2016    source источник


Ответы (1)


Вы используете TouchPhase.Began, поэтому в тот момент, когда вы скрываете свое главное меню, прикосновение все еще активно, и, следовательно, игрок прыгает, я предлагаю вам использовать сопрограмму с методом waitforseconds, прежде чем вы сможете снова заставить игрока прыгать.

person LumbusterTick    schedule 29.02.2016
comment
Ламб, новичкам никогда не следует использовать сопрограммы. Просто используйте простой вызов Invoke. - person Fattie; 29.02.2016
comment
хорошо, тогда попробуйте этот оператор if и поместите в него весь свой сенсорный код: if(!MainMenu.isactiveSelf){} , посмотрите, поможет ли это - person LumbusterTick; 01.03.2016