我有一个包含大约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还通过在那里设置断点来验证。
答案 0 :(得分:3)
有很多事情可能导致回调函数无法被调用。在尝试这些之前,将Debug.Log
放在OnPointerDown
函数中以确保它被调用:
1 。转到GameObject - &gt; UI ---&gt; EventSystem。
将创建名为“EventSystem”的GameObject,并附加适当的脚本,例如EventSystem
,StandAloneInputModule
。
2 。PlaneBehaviour
脚本必须附加到GameObject,其中Collider 不为空游戏对象。它会检测到它所附着的对象的点击。
3 。如果您使用的是名称中以“2D”结尾的对撞机,则必须使用Physics2DRaycaster
代替PhysicsRaycaster
。
4 。您使用两台以上的相机吗?如果是这样,请手动将PhysicsRaycaster
附加到当前显示该对象的正确相机。
5 。重新调整要检测点击次数的游戏对象的大小。我见过这样做有时会解决问题。如果可行,则必须将相机移回。