EventSystem OnPointerXXX函数未被调用

时间:2017-07-21 08:11:06

标签: c# unity3d

我有一个包含大约200个图块的平面,我希望能够检测到播放器点击了哪个图块。每个瓷砖都附有一个盒子对撞机。我还在场景中创建了一个空的游戏对象EventSystem和下面的脚本:

public class PlaneBehaviour : MonoBehaviour, IPointerDownHandler {
    public GameObject ClickSymbol;

    public void Start() {
        var physicsRaycaster = FindObjectOfType<PhysicsRaycaster>();

        if (physicsRaycaster == null) {
            Camera.main.gameObject.AddComponent<PhysicsRaycaster>();
        }
    }

    public void OnPointerDown(PointerEventData eventData) {
        var o = eventData.pointerCurrentRaycast.gameObject;
    }
}

现在,当用户点击任何地方时,没有任何反应 - 我在OnPointerDown方法中放置了一个断点,但它没有被击中(Start方法中的代码运行 - 我' ve还通过在那里设置断点来验证。

1 个答案:

答案 0 :(得分:3)

有很多事情可能导致回调函数无法被调用。在尝试这些之前,将Debug.Log放在OnPointerDown函数中以确保它被调用:

1 。转到GameObject - &gt; UI ---&gt; EventSystem。

将创建名为“EventSystem”的GameObject,并附加适当的脚本,例如EventSystemStandAloneInputModule

2 PlaneBehaviour脚本必须附加到GameObject,其中Collider 为空游戏对象。它会检测到它所附着的对象的点击。

3 。如果您使用的是名称中以“2D”结尾的对撞机,则必须使用Physics2DRaycaster代替PhysicsRaycaster

4 。您使用两台以上的相机吗?如果是这样,请手动将PhysicsRaycaster附加到当前显示该对象的正确相机。

5 。重新调整要检测点击次数的游戏对象的大小。我见过这样做有时会解决问题。如果可行,则必须将相机移回。