【问题标题】:Player is falling through the floor球员从地板上掉下来
【发布时间】:2017-07-24 04:43:37
【问题描述】:

我什么都试过了。无论我在其下放置哪种游戏对象(立方体等),玩家都会失败。它有一个圆形矿工和一个刚体。

我怎样才能阻止物体从地板上掉下来

我应该提一下,玩家一旦接触到任何东西就会死亡,所以我不知道如何处理。

【问题讨论】:

  • A collider....既然是 2D 对象,您是否将 2D collider 附加到对象和地板上?
  • 是的,我已将 2D Collider 附加在地板上。但它设法失败了
  • 不仅是地板,还有其他物体。此外,必须在两者上禁用 isTrigger。如果这是您所做的,请发布两个 GameObject 的 Inspector 的屏幕截图。
  • 如果我为我的播放器禁用 isTrigger,那么它将无法通过我需要的其他对象。

标签: c# unity3d 2d


【解决方案1】:

如果物体从地板上掉下来,这里是要检查的东西。

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

2。是否在任何对象碰撞器上启用了 isTrigger?如果是,则在两个碰撞器上禁用 IsTrigger。

3。如果刚体附加到游戏对象,请确保玩家在点击“播放”之前 100% 高于地板,否则您会遇到更多问题。

4。游戏对象的大小可能很小。真的很小。在对象与另一个对象发生碰撞之前,对象的大小是有限制的。尝试调整对象的大小,然后将相机向后移动。

如果我为我的播放器禁用 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);

这将让玩家不会穿过地板,而是穿过你想要的任何其他物体。您也可以从编辑器设置... Edit --> Project Settings --> Physics --> 或 编辑 --> 项目设置 --> Physics 2D

玩家一旦接触到任何东西就应该死亡, 所以我不知道如何处理这个

这与问题无关,但OnCollisionEnter2D 用于检测碰撞。您可以在播放器上拨打Destroy

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

编辑:

如果您还需要检测玩家何时接触其他碰撞器但不希望它们实际碰撞,那么您可以执行我上面描述的操作,然后将带有碰撞器的子对象添加到玩家。这些子对象将具有isTrigger 启用。然后,您可以使用OnTriggerEnter 函数来检测那些不是地板的对象之间何时发生碰撞。

void OnTriggerEnter(Collider other)
{

}

【讨论】:

  • 我是 Unity atm 的菜鸟,这可能是一个愚蠢的问题,但我应该将此代码粘贴到播放器脚本中吗? Physics2D.IgnoreCollision(yourFirstCollider, yourOtherCollider, true);
  • 查看doc 获取完整示例。您需要将 Collider2D 传递给函数。顺便说一句,我建议你使用Physics2D.IgnoreLayerCollision,你只需要传递层号。 Physics2D.IgnoreLayerCollision(3,5,true) 这意味着第 3 层和第 5 层之间没有冲突。谷歌“如何在 Unity 中创建层”以获取更多信息。
猜你喜欢
  • 1970-01-01
  • 2021-10-17
  • 2018-08-19
  • 1970-01-01
  • 2018-01-23
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多