我正在尝试确定播放器何时接地,并且使用桌面播放器,下面介绍的方法效果很好,但是当编译到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()
上没有更新
这就是碰撞器的设置方式:
层次结构:
我用于地面检查的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
有谁知道这里的问题是什么?
答案 0 :(得分:0)
可能的修复:
如果您正在使用网格对撞机,请切换到使用盒式对撞机。当网格碰撞器表现得粗略时,这种情况会不时发挥作用。
使用OnTriggerStay而不是OnTriggerEnter。