Unity OnTriggerEnter и OnTriggerExit задерживаются или не работают на мобильных устройствах

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

Код, используемый для определения заземления игрока:

void OnTriggerEnter2D(Collider2D other) {
    if (other.tag == "NormalGround") {
        player.Grounded = true;
    }
}

void OnTriggerExit2D(Collider2D other){
    if (other.tag == "NormalGround") {
        player.Grounded = false;
    }
}

На рабочем столе это работает отлично, как показано здесь, записав заземленную переменную в текстовое поле в Update ():

https://www.youtube.com/watch?v=CV0h18dz1cg

А вот на Android коллайдеры как будто отстают:

https://www.youtube.com/watch?v=c66uw2_NhrQ

В конце видео вы можете видеть, что переменная изменяется только после того, как я сделал прыжок персонажа ... (истинный ложный текст обновляется каждый кадр, поэтому он не обновляется Jump()

Вот как устроены коллайдеры:

Иерархия:

Иерахи

GO, который я использую для проверки земли:

Groundcheck

Как настраиваются платформы / земля:  Платформы

1: Триггер, используемый для определения, когда игрок заземлен (отображается в инспекторе)

2: Коллайдеры, используемые для предотвращения падения игрока сквозь спрайты (не в инспекторе)

Код Jump ():

    public void Jump ()
{
    if (!(PlayerDoubleJumped) && (Grounded) || ((!(Grounded) && (!PlayerJumped)))) {
        rb.velocity = new Vector2 (rb.velocity.x, JumpForce);
        animator.Play ("JumpCycle");
        PlayerJumped = true;
    } else if (!(Grounded) && (!(PlayerDoubleJumped)) && (PlayerJumped)) {
        rb.velocity = new Vector2 (rb.velocity.x, DoubleJumpForce);
        animator.Play ("JumpCycle");
        PlayerDoubleJumped = true;
    }
}

Вот как я перемещаю игрока:

this.transform.rotation = Quaternion.Euler (new Vector3 (0, 0, 0)); rb.velocity = new Vector2 (RunningSpeed, rb.velocity.y);

Настройки Physics2D (по умолчанию):

Физика 2д

Я использую Unity 5.5.0

Кто-нибудь знает, в чем проблема?


person Tiaan    schedule 20.06.2017    source источник
comment
Это интересно. Обычно это происходит, когда вы возитесь с настройками физики. Я не могу сказать, так как проект не передо мной. Как вы перемещаете игрока? Как ты прыгаешь? Можете ли вы опубликовать код движения и прыжка?   -  person Programmer    schedule 20.06.2017
comment
Я предполагаю, что физический интервал в ваших настройках слишком велик.   -  person Farhan    schedule 20.06.2017
comment
@Programmer Добавлю это к вопросу сейчас   -  person Tiaan    schedule 20.06.2017
comment
@Farhan Все по умолчанию, что касается глобальных настроек физики ...   -  person Tiaan    schedule 20.06.2017


Ответы (1)


Возможные исправления:

  • Если вы используете коллайдер сетки, переключитесь на использование коллайдера коробки. Это срабатывает время от времени, когда коллайдеры сетки работают схематично.

  • Используйте OnTriggerStay вместо OnTriggerEnter.

person Doh09    schedule 09.09.2017