5
3

More than 5 years have passed since last update.

IPointerUpHandlerを実装しても呼ばれなかった

Last updated at Posted at 2016-09-12

概要

EventSystemのIPointerUpHandlerを実装してイベントを受け取ろうとしたところ、うまくいかなかった時の解決方法メモ

バージョン

Unity5.4.0f3

問題

マウスボタンを離した時のイベントがほしかったので、IPointerUpHandlerを継承して、OnPointerUpを実装したところまったく呼ばれなかった。

public class PointerUpHandler : MonoBehaviour, IPointerUpHandler
{
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("呼ばれない!");
    }
}

EventSystemコンポーネントはあるし、
3Dオブジェクトにイベントを飛ばすために、CameraにはPhysicsRaycasterを付けていたのだが呼ばれなかった。

解決方法

サポートされているイベントを見ると、

IPointerUpHandler - OnPointerUp - ポインターを離したときに呼び出されます(押下されているオブジェクトで呼び出されます)

とある。

どうやら、IPointerDownHandlerが実装されていないと押下されている状態にならず、
Upイベントも呼ばれないらしい。
IPointerDownHandlerを実装することで呼ばれるようになった。

public class DownUpHandler : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("呼ばれる!");
    }
}

またDrag系のイベントも、IDragHandlerが実装されていないとドラッグ対象にならないため、関連のイベントが呼ばれなかった。
関係のあるイベントは空でも実装しておいたほうがよさそう。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3