我动态创建预制件的实例 - 称为 Animal。在某些情况下——我在 Animal 中动态实例化嵌套预制件——称为 Carrot。
Animal 和 Carrot 都实现了
IPointerDownHandler
并且有 OnPointerDown
方法:
public void OnPointerDown(PointerEventData data)
{
Debug.Log("POINTER DOWN IN ANIMAL !!!" + data);
}
public void OnPointerDown(PointerEventData data)
{
Debug.Log("POINTER DOWN IN CARROT !!!" + data);
}
但是 - 胡萝卜中的那个永远不会被调用。我总是从 Animal 实例中获取调试日志。
知道为什么我无法检测到两者上的指针向下,以便我知道用户是否单击/轻敲了胡萝卜或持有它的动物吗?
在一天结束时 - 胡萝卜中的听众根本没有开火 :( ... 即使我移除了动物身上的听众。
所以 - 我最终将 Animal 侦听器的 PointerEventData 参数数据转换为世界位置,并将其与 Animal 本身的 transform.position 进行比较 - 从而指定用户是点击了动物还是胡萝卜。
愚蠢...但工作:)
你需要在 Main Camera 中使用 Physics Raycaster 并且你需要设置 Max Ray Intersections 0.
如果你想点击物体后面,你可以改变最大光线交叉数。