好的,所以我完全不知道如何解决此问题。我有一个IPointerClickHandler的实现,它像这样:

public void OnPointerClick(PointerEventData eventData)
{
    Debug.Log(gameObject.name);

    //Othe rstuff
}


因此,至少每个带有此对象的对象都应在控制台上打印其名称。现在,我有2个屏幕截图,可以进一步说明问题。
c# - Unity3D OnPointerClick是基于凸轮位置的吗?-LMLPHP

当相机处于此位置时,带有lilipop和公文包的两块瓷砖不会触发OnPointerClick。

c# - Unity3D OnPointerClick是基于凸轮位置的吗?-LMLPHP

稍微向右移动凸轮,即可正确触发该事件。

我检查/尝试过什么:
没有东西挡住物体
相机具有连接的2D Physical Ray投射器。它的层是正确的。
这些图块具有BoxCollider2D。
 编辑:做了一个简单的光线投射测试;这是相机附带的代码。只要在屏幕上可以看到对撞机的一部分,就可以从任何位置击中。即使碰撞器的一部分位于视口边缘附近或外部。 OnPointerClick不起作用。我该如何解决?

public class RayCasterTest : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.up, 0.0f);
        if (hit.collider != null)
            Debug.Log(hit.collider.gameObject.name);
    }
}

最佳答案

好吧,我该怎么解释。我的一切背后都有一个很大的2dBoxcollider。我将其用作相机范围。现在由于某种原因,EventSystem会不时命中它,而不是正确的对撞机(如果确实发生的话)。将此对撞机设置为Physics3d raycaster排除的图层似乎已解决了该问题。

10-08 06:42