我有一架包含约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
方法中的代码正在运行-我还通过将一个断点)。 最佳答案
有很多事情可能导致回调函数没有被调用。在尝试这些操作之前,请将Debug.Log
放在OnPointerDown
函数中,以确保它被调用:
1.转到GameObject-> UI ---> EventSystem。
将创建一个名为“ EventSystem”的GameObject,并将附加适当的脚本,例如EventSystem
,StandAloneInputModule
。
2. PlaneBehaviour
脚本必须通过对撞机连接到GameObject,而不是空的GameObject。它检测到单击了附加到的对象。
3.如果使用名称为“ 2D”结尾的对撞机,则必须使用Physics2DRaycaster
而不是PhysicsRaycaster
。
4.您是否使用两个以上的相机?如果是这样,请手动将PhysicsRaycaster
附加到当前显示该对象的正确摄像机。
5.重新调整您要检测点击次数的GameObject的大小。我看到这样做有时可以解决问题。然后,如果可行,则必须将摄像机移回。
关于c# - 未调用EventSystem OnPointerXXX函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45232431/