我正在制作 2D 平台游戏类型的游戏。在这个平台游戏中,既有玩家,也有“敌人”。出现问题的原因是:我需要敌人和玩家都与地面碰撞,这样他们就不会掉下来。我需要检测玩家何时与敌人发生碰撞,以便记录伤害。我需要玩家能够穿过敌人。脚上的碰撞器不是一个选择,因为玩家可能会与之交互。处理这种特定碰撞检测的最佳方法是什么?
最佳答案
您可以使用Layer Collision Matrix (编辑->项目设置->Physics2D)准确定义layers可以与其他层发生碰撞。
所以我会简单地在播放器上使用两个碰撞器:
- 其中一个不是触发器,因此可能会与地面发生碰撞。将其放在与
ground
层发生碰撞的playerGround
层上。 - 另一个是触发器,可以与敌人层发生碰撞。命名它例如
playerEnemy
或其他东西。
由于每个游戏对象只能有一层,因此您的碰撞器必须位于不同的对象上,例如喜欢
player (Rigidbody2D)
|--GroundCollider(layer: playerGround)
|--EnemyCollider(layer:playerEnemy, isTrigger)
enemy
层可以与地面
和playerEnemy
发生碰撞。
这样双方就可以在地面上行走了。玩家可以穿过敌人,但您可以使用 OnTriggerEnter
来检测与敌人的碰撞。
关于unity-game-engine - 忽略特定情况下的碰撞,同时仍将其用作触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451200/