我有一个基于平铺的游戏 . 我将塔作为瓷砖的儿童对象 . 我希望能够通过光线投射检测塔上的鼠标点击,而不是瓷砖 . 瓷砖和塔都有2d箱式对撞机 . 我可以检测到瓷砖上的点击,但是光线投射不会检测到塔上的点击 . 我怎么解决这个问题 . 谢谢 .
这是我的光线投射代码:
if (Input.GetMouseButtonDown(0))
{
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
ray.origin = camera.transform.position;
RaycastHit2D hit = Physics2D.Raycast(camera.transform.position, -Vector2.up, 50, 8);
if (hit.collider != null && !EventSystem.current.IsPointerOverGameObject())
{
Debug.Log(hit.collider.transform.tag);
//Transform objectHit = hit.transform;
}
}
}
当我掩盖瓷砖(这里是第8层)时,我什么都没得到 . 虽然塔(像瓷砖)也有一个2d的盒子对撞机,但它似乎从来没有撞到过塔楼 .
2 回答
经过一番研究后,似乎一个物体的所有儿童对撞机都被认为属于父母 . 这样你就可以用较小的对撞机构建一个更复杂的对撞机,这种情况通常是需要的 . 仍然可以使用它的transform属性引用精确对撞机,例如:
这将特别指儿童对撞机 .
Unity使用图层系统,您可以过滤掉光线投影使用的图层 . 您可以使用它来击中特定的碰撞器,并避免其他像瓷砖/塔问题 . 语法(适用于2d版本)是:
在这里,您可以看到layermask参数选择与父对象所在的图层不同的图层 . 然后使用检查器中的下拉菜单将子项放在不同的图层上,如下所示 .
您可以分别设置父级和子级游戏对象的图层 .
希望有所帮助