【Unity】EventTriggerを使ったらScrollViewが機能しなかった話
はじめに
Unityのデフォルト機能であるScrollViewを使っているときに下のような問題にぶち当たりました。
- ButtonだとScrollViewは動く
- EventTriggerをアタッチしたオブジェクトだとScrollViewが動かなくなる
参考GIF↓↓↓(Button以外はEventTriggerがアタッチされています)
Buttonはイベントの発行タイミングをイジれないので使いたくない...。
なので、EventTriggerを使いたいのに...こんなのヒドい!
となりまして、解決したのでメモを残しておきます〜。
代替案
Unityの内部を理解していないので詳しくは分かりませんが、あるオブジェクトAにEventTriggerを使ってしまうとAの上ではScrollViewのスクロールが無効化(当たり判定が貫通しなくなる?)されるようです。
そこで、EventTriggerと同じ機能を自前で実装することで解決します。
(おそらく、厳密には同じではないです。同じだとScrollViewが機能しませんから笑)
実装
今回は例として、EventTriggerのPointer Click
と同じ機能をつけたいと思います。
以下のスクリプトを実装して、EventTriggerの代わりにアタッチしましょう。
using UnityEngine; using UnityEngine.EventSystems; public class ContentClickListener : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData eventData) { Debug.Log("クリックされたよ。"); } }
すると、以下のGIFのようにScrollViewのスクロールを妨げずにEventTriggerと同じ機能が使用可能になります!パチパチ!!
今回はPointer Click
を実装したかったのでIPointerClickHandler
を実装してOnPointerClick
メソッドを実装しましたが、他のイベントも【基本的に】同じように実装できます。
+α
GIFを見ると、ドラッグするとクリックが無効化されていますね。これはUnityの仕様で、ドラッグが始まるとクリックがキャンセルされるようです。(気になる方はググってみてください)
おわり
EventTrigger (EventSystem側?) でも当たり判定を貫通させるパラメータありそうだけど見つからなかったので、この方法で押しました〜。
知っている方がいましたら教えてください!