UnityでIPointerClickを実現する親物体と子物体の問題

1847 ワード

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を追加することもできると言っていましたが、私は検証するのがおっくうではありませんでした.