Unity Physics2D.BoxCast() 无法在特定图层上找到 GameObject

Unity Physics2D.BoxCast() can not find GameObject on specific layer

我对 Unity 中的 BoxCast 方法有很大的疑问。如果在特定层上的播放器下有任何 GameObject 但存在问题,我正在尝试获取信息。即使明明有对象,该方法也找不到玩家下方的任何游戏对象。

private CapsuleCollider2D PlayersCapsuleCollider;
private bool CanJump()
{
    RaycastHit2D ray = Physics2D.BoxCast(PlayersCapsuleCollider.bounds.center, PlayersCapsuleCollider.bounds.size, 0f, Vector2.down, Mathf.Infinity, 12 /*number of the layer mask*/);
    return ray.collider != null;
}

(可能是有用的信息)但是这只有在我试图在第 12 层上寻找对象时才会看起来像这样,如果我正在寻找不同层(第 3 层)上的对象,BoxCast 正在寻找玩家的碰撞器(玩家在默认层 0 上)

更多 - 我希望 - 有用的屏幕:

玩家所在平台层数:

你应该得到图层蒙版:

LayerMask layerMask = LayerMask.GetMask("Floor");

并将其传递给 Physics2D.BoxCast 而不是 12

您可以在 https://docs.unity3d.com/ScriptReference/LayerMask.html

阅读更多关于图层蒙版的信息

像 BoxCast 这样的物理查询正在寻找一个 LayerMask 而不是代表层 ID 号的 int。要获得层 ID 12 的 LayerMask,您可以使用 1 << 12 将第 12 位移动到 1。虽然有一种更简单的方法来创建 LayerMask,您可以使用其他答案中提供的方法,或者您可以在 class 上创建一个序列化的 LayerMask 字段,然后简单地在检查器中分配图层。

我遇到了与 Physics2D.Boxcast() 类似的问题,但我能够以某种方式解决它。首先按照 的建议更正图层问题,然后我认为下一个问题来自光线距离设置为 Math.Infinity。盒子一直延伸到无穷远,所以即使它在空中也总是会发生碰撞。尝试设置一个小距离,例如 0.1f。因此,当它在空中时,除非距离那么近,否则不会发生碰撞。希望对您有所帮助