我有一个基于磁贴的游戏。我将塔作为瓷砖的儿童对象。我希望能够通过光线投射检测塔上的鼠标点击,而不是瓷砖。瓷砖和塔都有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的盒子对撞机,但它似乎从来没有撞到过塔楼。
答案 0 :(得分:0)
我建议使用3d射线而不是2d射线。也许Camera.screenPointToRay可能会出现。另外,我建议你先阅读:https://forum.unity3d.com/threads/unity-2d-raycast-from-mouse-to-screen.211708/
答案 1 :(得分:0)
只是钓鱼,但您的儿童对撞机是否可能隐藏在父母的结肠内?然后Raycast只返回第一个命中。您可以尝试RaycastAll
,如下所示:
https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html
并循环浏览控制台中的所有命中,以了解您是否真正获得了对撞机。
答案 2 :(得分:0)
仅限制用于特定图层的光线投射
//get the mask to raycast against either the player or enemy layer
int layer_mask = LayerMask.GetMask("Player", "Enemy");
//or this would be just player
//int layer_mask = LayerMask.GetMask("Player");
//or this would be player, enemy or cows!
//int layer_mask = LayerMask.GetMask("Player","Enemy","Cows");
//do the raycast specifying the mask
if (Physics.Raycast (ray, out hit, distance, layer_mask))
{
}