好的,所以我完全不知道如何解决此问题。我有一个IPointerClickHandler
的实现,它像这样:
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log(gameObject.name);
//Othe rstuff
}
因此,至少每个带有此对象的对象都应在控制台上打印其名称。现在,我有2个屏幕截图,可以进一步说明问题。
当相机处于此位置时,带有lilipop和公文包的两块瓷砖不会触发OnPointerClick。
稍微向右移动凸轮,即可正确触发该事件。
我检查/尝试过什么:
没有东西挡住物体
相机具有连接的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排除的图层似乎已解决了该问题。