【Unity】スクロールビュー上のボタン制御


スクロールビューの中にボタンをおくことはままあるけど、クリック時の動作をコントロールしようとすると少し面倒になる。

長押し時の動作を設定したくて苦労した話。

 

まず普通にスクロールビューの Content 下にボタンを置いてみる。

クリック自体は問題ない。

ボタンを押した状態でもスクロールが出来るがクリックは解除される。

 

 

この状態で長押しできるようにスクリプトを追加する。

このスクリプトで長押しは検知できる。

ただし OnPointerUp は押下状態からの移動でも検知されるので、押しながら移動した場合は意図した動作にならない。

OnBeginDrag などで検知しようにもそもそも呼ばれない。

 

そこで EventTrigger の上書きをしてみる。

元の動作を邪魔しないように基底メソッドの呼び出しもしてみた。

それぞれのメソッドは期待通り呼ばれるが、ボタンを押しながらドラッグしたときの動作が変わった。

オーバーライドせずに EventTrigger を継承した空のスクリプトを追加するだけでも同じ現象が起きる。

 

わけわからんと思ってたらこんな記事を見つけた。

UnityのuGUIでスクロール中にボタンの長押しをするスクリプト - プログラミングで世界を変える
あまり需要はなさそうなスクリプトですが、使い方や実装等をまとめておきます。 こちらが今回のスクリプトを使ったサンプルです。 splas-boomerang/SampleLongPressgith...

この通りにボタンとスクロールビューにスクリプトを追加すると期待通りに動いた!

 

まだちゃんと理解できてないけどスクロールビューのほうも弄らないといけなかったみたいだ。

どうも既定のものをイジるのは面倒なことが多いので、こだわりがなければ妥協したほうが良いかもしれない。

 


コメントを残す

メールアドレスが公開されることはありません。