首页 > 解决方案 > 使用图层蒙版进行光线投射

问题描述

我最近开始在 Unity 中为我正在制作的游戏学习 RayCast,但是在尝试使用图层蒙版过滤我的 2 Dimensional RayCast 时遇到了问题。

我正在尝试使用光线投射来确定光线路径中是否存在墙壁对象(基本上是带有盒子碰撞器的 2D 方形预制件)。

我已将所有墙壁对象放置在用户层 8(称为“墙壁”)上,并希望使用仅允许光线与墙壁图层上的对象接触的图层蒙版,以避免光线与任何其他对象发生碰撞.

我正在使用的 RayCast 从不在 Walls 层上的另一个对象开始;如果没有 LayerMask,光线将立即与该对象接触,并返回该对象。

这是我尝试将 RayCast 与 LayerMask 过滤器一起使用的代码

print("testing for collisions");
relitivePos = new Vector2(turns[k+1].x-turns[k].x,turns[k+1].y-turns[k].y);
relitivePos = new Vector2(Mathf.Round(relitivePos.x), Mathf.Round(relitivePos.y));
int layerMask = (1 << 8);
//layerMask = ~layerMask;
RaycastHit2D hitInfo = Physics2D.Raycast(turns[k], relitivePos, (relitivePos.y.Equals(1) ? turns[k + 1].y - turns[k].y : turns[k + 1].x - turns[k].x), layerMask);
UnityEngine.Debug.DrawLine(turns[k], turns[k + 1], Color.blue, 100f);
print("hit? " + (hitInfo.collider != null? "true":"false"));
if (hitInfo.collider != null)
{
    print("gameobject" + hitInfo.collider.gameObject);
    print("collider name " + hitInfo.collider.name);
}

我尝试通过层号对 int 进行位移以创建 LayerMask,以及使用LayerMask.GetMask("Walls");在这两种情况下,RayCast 似乎都没有击中任何东西(prints: "hit? false")。删除 LayerMask 时,它将打印 LayerMask 最初以 ( prints:"collider name door") 开头的对象。

我不明白为什么我的 RayCast 在使用 LayerMask 时没有检测到特定图层上的对象?

更新:

标签: c#unity3draycastingphysics-engine

解决方案


推荐阅读