要实现的是 玩家 遇到平台,不会 被 平台的碰撞体 阻拦,而是当 玩家 除了 站立 静止、运动 的状态 才会站立在地面上。
要 实现 这个 功能,就得 在 玩家 的位置 坐标 发射 几个方向的 2D射线检测,除了 黑色 地面的 碰撞体 不进行 忽略,其他的 类似平台 的碰撞体 全部进行忽略。
(玩家)绿色长方形 碰撞体BoxCollider2D。
(地面)黑色 线性碰撞体 EdgeCollider2D。
(平台)红色 线性碰撞体 EdgeCollider2D 或者是 多边形线性碰撞体Polygon Collider 2D。
除了 2D射线检测 Physics2D.Raycast 参考资料4以外,2D盒型射线检测 参考资料3,2D 圆形射线检测 参考资料2
都可以检测 单一 某特定层级 碰撞体 的物体。
Physics2D.RaycastAll 获得一个 碰撞体数组,里面包含了 所有 除了 2D射线检测到以外 的所有的 碰撞体。
如果用Physics2D.RaycastAll 在玩家的位置,向下 进行射线检测,检测地面碰撞体,那么就会 获得 一个 2D碰撞体 数组,里面包含了所有除了 地面 以外所有该 场景 的碰撞体。
对平台的2D碰撞体 例如:BoxCollider2D的UsedBy Effector勾选,并且这个实体添加组件PlatformEffector2D。仅碰撞从上面向下的碰撞体。
参考资料:
1.Physics2D
2.Physics2D.CircleCast
3.Physics2D.BoxCast
4.Physics2D.Raycast
5.Physics2D.RaycastAll
6.[Unity][2D][物理碰撞]同一层级碰撞体忽略碰撞
7.IgnoreCollision
8.IgnoreLayerCollision
9.