球员正在落地
我试过了一切。无论我放在其下的什么样的GameObject(立方体等),玩家都会落空。它有一个圆形的矿工和一个刚体。球员正在落地
如何从通过地板
我应该指出,停止下落物体,玩家应该死一次谈到接触到任何东西,所以我不知道如何处理这一点。
对于您希望播放器通过的对象,触发器必须是真实的。玩家isTrigger应始终为假。
玩家需要附上一个rigidbody2D。
在您的代码上进行调试,对于触发的碰撞检查OnTriggerEnter2d和非触发的碰撞检查OnCollisionEnter2D进行检查。
如果对象在地板上下落,这里是要检查的事情。
。是否将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)
{
}
我是Unity的atm noob,可能是一个愚蠢的问题,但我是否将这段代码粘贴到播放器脚本中? 'Physics2D.IgnoreCollision(yourFirstCollider,yourOtherCollider,true);' – ROOT
查看完整示例的[doc](https://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html)。您需要将Collider2D传递给函数。顺便说一句,我建议你使用'Physics2D.IgnoreLayerCollision'来代替你只需要传递图层编号。 'Physics2D.IgnoreLayerCollision(3,5,true)'这意味着在第3层和第5层之间没有collsion。Google“如何在Unity中创建图层”了解更多信息。 – Programmer
对撞机....因为它是2D对象,您是否将2D对撞机附加到对象和地板上? – Programmer
是的,我已将2D Collider安装在地板上。但它设法通过 – ROOT
不仅仅对地板而且对另一个对象也是如此。此外,两者都必须禁用isTrigger。如果这是你所做的,那么发布GameObject的Inspector的屏幕截图。 – Programmer