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,游戏中的所有精灵位置.z = 0.此方法永远不会完成,它总是进入第一个,如果它说鼠标位置下没有碰撞器。我在这做错了什么?
编辑:事实证明我的错误是非常愚蠢的,我使用物理而不是物理2D来进行2d对撞机。如何使用2d光线投射检查相同的内容?
答案 0 :(得分:1)
解决方案是在所有地方使用2d方法和变量类型,并使用Vector2.zero指向RaycastAll的方向,除非你把Vector2.zero放进去; s不能工作。