在特定情况下忽略碰撞,同时仍将其用作触发器

Ignore collision in specific circumstances while still using it as a trigger

我正在制作一款 2D 平台游戏。在这个平台游戏中,有玩家和 "enemies"。问题的出现是因为:我需要敌人和玩家都与地面发生碰撞,这样他们就不会掉下去。我需要检测玩家何时与敌人发生碰撞,以便记录伤害。我需要玩家能够穿过敌人。将对撞机放在脚上不是一种选择,因为玩家可能会与之互动。处理这种特定碰撞检测的最佳方法是什么?

你可以使用Layer Collision Matrix (Edit -> ProjectSettings -> Physics2D) to define exactly which layers可以与其他图层发生碰撞

所以我会简单地在播放器上使用两个碰撞器:

  • 一个是不是触发器,所以它可以与地面碰撞。将其放在与 ground 层碰撞的层 playerGround 上。
  • 另一个触发器,可以和敌人层碰撞。将其命名为例如playerEnemy 什么的。

由于每个游戏对象只能有一层,因此您的碰撞器必须位于不同的对象上,例如喜欢

player (Rigidbody2D)
|--GroundCollider(layer: playerGround)
|--EnemyCollider(layer:playerEnemy, isTrigger)

enemy层可以与groundplayerEnemy发生碰撞。

这样既可以在地上行走。玩家可以穿过敌人,但您可以使用 OnTriggerEnter 来检测与敌人的碰撞。