2017-07-06 110 views

回答

1

/编辑 - 实际上piojo的计数器的想法更好,只需使用int而不是bool。 一种方法是在脚本中添加一个叫做碰撞的int并将其设置为0.然后,如果在任何时候碰撞器触发OnCollisionEnter只是增加它,并在OnCollisionExit中减少它。 这样的事情应该为3D工作:

public int collisions = 0; 

void OnCollisionEnter(Collision collision) 
{ 
    collisions++; 
} 

void OnCollisionExit(Collision collision) 
{ 
    collisions--; 
} 

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionExit.html

+2

正如我在我的回答中所提到的,你不能使用bool来做这件事。你需要一个整数计数器,否则只要碰到两个障碍物就会失败。这不是一个边缘情况,因为你总是与地面碰撞。 – piojo

+1

是的,你是正确的 - 我调整了我的答案 – Fiffe

+0

是的,我也试过这个,但使用布尔值,所以它失败了一段时间,因为piojo说。使用计数器会很好,我认为。谢谢 –

4

不是本身,而是有两种方法,你可以得到的信息。保持int计数器最简单,并将其增量为OnCollisionEnter并递减为OnCollisionExit。当计数器为0时,不存在冲突。

另一种方式,它会告诉你哪些对撞机重叠,但不一定如果他们触摸,是使用物理功能。注意你有哪种类型的对撞机 - 球体,胶囊,盒子。了解对撞机的尺寸/形状/位置,您可以拨打Physics.OverlapBox,Physics.OverlapCapsulePhysics.OverlapSphere。赋予函数与对撞机相同的形状,并且它将返回与该空间重叠的碰撞体。 (对于2D对撞机,您可以使用Physics2D.Overlap*功能。)

+0

ow这是非常有益的..谢谢piojo –

+0

@sristy_poka不客气!我在我的项目中完成了同样的事情,总是知道玩家是否在场。 – piojo

+0

应该被接受为答案。 –