如何找到鼠标下方的所有碰撞器?
How to find all colliders below mouse?
public static bool IsTopmost(GameObject go)
{
RaycastHit[] hits;
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
wp.z = Camera.main.transform.position.z;
hits = Physics.RaycastAll(wp, Vector3.forward, Vector3.Distance(Camera.main.transform.position, go.transform.position) * 2);
if (hits.Length == 0)
{
return false;
}
GameObject topMostSoFar = hits[0].collider.gameObject;
RaycastHit hit;
for (int i = 1; i < hits.Length; i++)
{
hit = hits[i];
if (Compare(topMostSoFar, hit.collider.gameObject) == -1)
{
topMostSoFar = hit.collider.gameObject;
}
}
Debug.Log("finishes method");
return topMostSoFar.name == go.name;
}
我的相机position.z = -5,游戏中的所有精灵position.z = 0。这个方法永远不会结束,它总是进入第一个如果说鼠标位置下没有碰撞器.我在这里做错了什么?
编辑:事实证明我的错误非常愚蠢,我使用 Physics 而不是 Physics2D 作为 2d 对撞机。我如何检查相同的东西但使用 2d 光线投射?
解决方案是到处使用2d方法和变量类型,并且RaycastAll的方向使用Vector2.zero,除非你把它Vector2.zero它不会工作。
public static bool IsTopmost(GameObject go)
{
RaycastHit[] hits;
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
wp.z = Camera.main.transform.position.z;
hits = Physics.RaycastAll(wp, Vector3.forward, Vector3.Distance(Camera.main.transform.position, go.transform.position) * 2);
if (hits.Length == 0)
{
return false;
}
GameObject topMostSoFar = hits[0].collider.gameObject;
RaycastHit hit;
for (int i = 1; i < hits.Length; i++)
{
hit = hits[i];
if (Compare(topMostSoFar, hit.collider.gameObject) == -1)
{
topMostSoFar = hit.collider.gameObject;
}
}
Debug.Log("finishes method");
return topMostSoFar.name == go.name;
}
我的相机position.z = -5,游戏中的所有精灵position.z = 0。这个方法永远不会结束,它总是进入第一个如果说鼠标位置下没有碰撞器.我在这里做错了什么?
编辑:事实证明我的错误非常愚蠢,我使用 Physics 而不是 Physics2D 作为 2d 对撞机。我如何检查相同的东西但使用 2d 光线投射?
解决方案是到处使用2d方法和变量类型,并且RaycastAll的方向使用Vector2.zero,除非你把它Vector2.zero它不会工作。