首页 > 解决方案 > Unity - 无法在嵌套的实例化预制件上检测 OnPointerDown

问题描述

我动态地创建了一个预制件的实例——叫做 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

解决方案


归根结底-胡萝卜中的侦听器根本没有开火:( ...即使我删除了动物上的侦听器。

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

愚蠢......但工作:)


推荐阅读