Unity - 无法在嵌套的实例化预制件上检测到 OnPointerDown

问题描述 投票:0回答:3

我动态创建预制件的实例 - 称为 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 实例中获取调试日志。

知道为什么我无法检测到两者上的指针向下,以便我知道用户是否单击/轻敲了胡萝卜或持有它的动物吗?

unity3d
3个回答
0
投票

胡萝卜是小一点还是在动物物体后面?动物对象可能会阻挡光线投射。 Look at this component

以下可能需要设置为 false 如果你想与之交互,因为它们重叠 The component property in code


0
投票

在一天结束时 - 胡萝卜中的听众根本没有开火 :( ... 即使我移除了动物身上的听众。

所以 - 我最终将 Animal 侦听器的 PointerEventData 参数数据转换为世界位置,并将其与 Animal 本身的 transform.position 进行比较 - 从而指定用户是点击了动物还是胡萝卜。

愚蠢...但工作:)


0
投票

你需要在 Main Camera 中使用 Physics Raycaster 并且你需要设置 Max Ray Intersections 0.

如果你想点击物体后面,你可以改变最大光线交叉数。

© www.soinside.com 2019 - 2024. All rights reserved.