Я пытаюсь определить, заземлен ли проигрыватель или нет, и используя настольный проигрыватель, метод, описанный ниже, работает отлично, но при компиляции для 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, который я использую для проверки земли:
Как настраиваются платформы / земля:
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 (по умолчанию):
Я использую Unity 5.5.0
Кто-нибудь знает, в чем проблема?