在特定情况下忽略碰撞,同时仍将其用作触发器
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
层可以与ground
和playerEnemy
发生碰撞。
这样既可以在地上行走。玩家可以穿过敌人,但您可以使用 OnTriggerEnter
来检测与敌人的碰撞。
我正在制作一款 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
层可以与ground
和playerEnemy
发生碰撞。
这样既可以在地上行走。玩家可以穿过敌人,但您可以使用 OnTriggerEnter
来检测与敌人的碰撞。