UnityでIPointerClickを実現する親物体と子物体の問題
UnityでIPointerClickを実現する親物体と子物体の問題
に質問
先ほど、IPointerClickインタフェースを実現したUIをクリックする簡単な小機能を書きましたが、単独でテストしても問題なく、クリックに応答できます. public void OnPointerClick(PointerEventData eventData)
{
//
if (text.text == defaultText)
text.text = secondText;
else
text.text = defaultText;
}
しかし、実際のシーンに適用してクリックすると、この関数は実行されず、代わりにこの物体の親物体の前に書いたOnPointerDownが実行されます.不思議なことに、UIキャンバスを単独で移動するテストは依然として問題なく、クリックに応答することができます.そこでインターネットで調べました
そしてこのブログを検索して、いいねと思っていたのですが、ログインします.私はアカウントを登録していないようですが、もういいです.
でも細かく見ていないので(字を読むのがおっくうな感じが...)、多分見て、ブロガーの結論を見ました.私の疑問を基本的に解いた.
結論
OnPointerClickは本来、押下と持ち上げが同じ物体であるかどうかを検出するためです.親物体がOnPointerDownを実現し、子物体がOnPointerClickのみを実現した場合、Clickが同じ物体であるか否かを検出する際に親物体と子物体の2つの物体検出となる.本来クリックしたサブオブジェクトはClickを実行すべきであったが実行しなかった.UGUIのソースコードを読むことでこのBUGを見つけることができます.簡単に解決する方法は、子物体をOnPointerDownに変えればいいのですが、もちろん機能は少し変わりますが、私が作ったものには影響しません.元ブロガーは、子物体にOnPointerDownを追加することもできると言っていましたが、私は検証するのがおっくうではありませんでした.
public void OnPointerClick(PointerEventData eventData)
{
//
if (text.text == defaultText)
text.text = secondText;
else
text.text = defaultText;
}
OnPointerClickは本来、押下と持ち上げが同じ物体であるかどうかを検出するためです.親物体がOnPointerDownを実現し、子物体がOnPointerClickのみを実現した場合、Clickが同じ物体であるか否かを検出する際に親物体と子物体の2つの物体検出となる.本来クリックしたサブオブジェクトはClickを実行すべきであったが実行しなかった.UGUIのソースコードを読むことでこのBUGを見つけることができます.簡単に解決する方法は、子物体をOnPointerDownに変えればいいのですが、もちろん機能は少し変わりますが、私が作ったものには影響しません.元ブロガーは、子物体にOnPointerDownを追加することもできると言っていましたが、私は検証するのがおっくうではありませんでした.