首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一OnTriggerEnter和OnTriggerExit延迟或不能在移动上工作

统一OnTriggerEnter和OnTriggerExit延迟或不能在移动上工作
EN

Stack Overflow用户
提问于 2017-06-20 00:45:17
回答 1查看 1.4K关注 0票数 3

我试图确定播放器什么时候停放,使用桌面播放器,下面描述的方法工作得很好,但是当编译到Android时,我不知道它是否被延迟了,但是它正在更新的bool很少是它应该是什么样子。

用于确定播放机是否接地的代码:

代码语言:javascript
复制
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上,几乎就像对撞机落后了一样:

NhrQ

在视频的末尾,您可以看到var只有在我跳过字符之后才会改变.(每个帧都会更新真正的假文本,因此不会在Jump()上更新

对撞机是这样设置的:

等级制度:

我用来做地面检查的方法:

平台/地面的设置方式:

1:触发器用于检测球员何时接地(在检验员中可见)

2:对撞机用来阻止玩家通过精灵坠落(而不是在检验员中)。

Jump()代码:

代码语言:javascript
复制
    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设置(默认):

我使用的是Unity5.5.0

有人知道这里有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-09 18:29:30

可能的解决办法:

  • 如果您使用网格对撞机,切换到使用盒对撞机。当网格对撞机的动作很粗略时,这种方法会不时地起作用。
  • 使用OnTriggerStay而不是OnTriggerEnter。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44642026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档