Unity OnTriggerEnter和OnTriggerExit延迟或无法在移动设备上运行

时间:2017-06-20 00:45:17

标签: android unity3d

我正在尝试确定播放器何时接地,并且使用桌面播放器,下面介绍的方法效果很好,但是当编译到Android时表现得相当奇怪,我不确定它是否只是延迟或是什么,但它正在更新的bool很少是应该的。

用于确定玩家是否接地的代码:

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

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

在桌面上,这非常有效,因为演示通过将基础var写入Update()上的文本框来实现:

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

但在Android上,几乎就像对手一样滞后:

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

您可以在视频的末尾看到var仅在我跳过字符后才发生变化...(真实的假文本每帧都会更新,因此Jump()上没有更新

这就是碰撞器的设置方式:

层次结构:

The hierachy

我用于地面检查的GO:

Groundcheck

如何设置平台/地面:Platforms

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设置(默认):

Physics 2d

我正在使用Unity 5.5.0

有谁知道这里的问题是什么?

1 个答案:

答案 0 :(得分:0)

可能的修复:

  • 如果您正在使用网格对撞机,请切换到使用盒式对撞机。当网格碰撞器表现得粗略时,这种情况会不时发挥作用。

  • 使用OnTriggerStay而不是OnTriggerEnter。