2017-07-24 14 views
-1

我试过了一切。无论我放在其下的什么样的GameObject(立方体等),玩家都会落空。它有一个圆形的矿工和一个刚体。球员正在落地

如何从通过地板

我应该指出,停止下落物体,玩家应该死一次谈到接触到任何东西,所以我不知道如何处理这一点。

+1

对撞机....因为它是2D对象,您是否将2D对撞机附加到对象和地板上? – Programmer

+0

是的,我已将2D Collider安装在地板上。但它设法通过 – ROOT

+0

不仅仅对地板而且对另一个对象也是如此。此外,两者都必须禁用isTrigger。如果这是你所做的,那么发布GameObject的Inspector的屏幕截图。 – Programmer

回答

0

对于您希望播放器通过的对象,触发器必须是真实的。玩家isTrigger应始终为假。

玩家需要附上一个rigidbody2D。

在您的代码上进行调试,对于触发的碰撞检查OnTriggerEnter2d和非触发的碰撞检查OnCollisionEnter2D进行检查。

3

如果对象在地板上下落,这里是要检查的事情。

。是否将Collider附加到该对象?如果没有,则将Collider或Collider2D附加到该对象。

。是否在任何物体碰撞器上启用触发器?如果是,则在两个对撞机上禁用IsTrigger。

。如果Rigidbody附加到GameObject上,那么请确保玩家在点击“Play”之前比楼层高100%,否则会遇到更多问题。

。GameObject的大小可能很小。真的很小。对象在与另一个对象发生冲突之前的大小有限制。尝试调整对象的大小,然后将相机移回。

如果我为我的播放器禁用isTrigger,那么它将无法通过我需要它的其他对象去通过 。

这根本不是问题。你可以使用图层来让Unity设置哪些对撞机可以与另一个碰撞。只需禁用isTrigger然后使用:

对于2D

Physics2D.IgnoreCollision(yourFirstCollider, yourOtherCollider, true); 

Physics2D.IgnoreLayerCollision(yourLayer, yourOtherLayer, true) 

对于3D

Physics.IgnoreCollision(yourFirstCollider, yourOtherCollider, true) 

Physics.IgnoreLayerCollision(yourLayer, yourOtherLayer, true); 

这将让玩家不会穿过场地,而是穿过任何其他你想要的物体。您也可以从编辑器设置中执行此操作...编辑 - >项目设置 - >物理 - >或编辑 - >项目设置 - >物理2D

玩家应该死一次它与任何东西接触,所以 我不知道如何处理这个

这是无关的问题,但OnCollisionEnter2D用于检测collsion。你可以在播放器上拨打Destroy

void OnCollisionEnter2D(Collision2D collision) 
{ 
    Destroy(player); 
} 

编辑:

如果您还需要当玩家接触其他对撞机来检测,但不希望他们实际上对撞机,那么你可以做什么上面,然后添加描述我子对象与球员的碰撞。这些子对象将启用isTrigger。然后,您可以使用OnTriggerEnter函数来检测那些不是地板的物体之间何时发生碰撞。

void OnTriggerEnter(Collider other) 
{ 

} 
+0

我是Unity的atm noob,可能是一个愚蠢的问题,但我是否将这段代码粘贴到播放器脚本中? 'Physics2D.IgnoreCollision(yourFirstCollider,yourOtherCollider,true);' – ROOT

+0

查看完整示例的[doc](https://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html)。您需要将Collider2D传递给函数。顺便说一句,我建议你使用'Physics2D.IgnoreLayerCollision'来代替你只需要传递图层编号。 'Physics2D.IgnoreLayerCollision(3,5,true)'这意味着在第3层和第5层之间没有collsion。Google“如何在Unity中创建图层”了解更多信息。 – Programmer