概要
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が実装されていないとドラッグ対象にならないため、関連のイベントが呼ばれなかった。
関係のあるイベントは空でも実装しておいたほうがよさそう。