スマホで時間入力というと色々な形のスライダーが増えつつあるけどドラムロール入力させるものもまだ多い。
スマホだとキーボード入力に一手間かかる。
ラジオボタンにするには選択肢が多い場合にはセレクトボックスかドラムロールを採用することが多いと思う。
Unityでは用意されてないので適当に作ってみる。
Unityだとスクロールビューが用意されているので、スクロールバーを削除してそれっぽいものを用意する。
さらにスクロールビューから水平の動きをなくして、コンテンツにはスクロールビューの1/2の高さの選択肢と、1/4の高さのヘッダ、フッタを入れる。
これでスクロール動作で全ての選択肢が中心に出来るように設定できる。
半端な位置で止まらないようにして、止まった場所のインデックスを取得するスクリプトはこう。
1 2 3 4 5 6 7 8 9 |
public class MyScroll : MonoBehaviour,IEndDragHandler { public void OnEndDrag( PointerEventData data ){ float max = 9f; //要素数-1 float pos = Mathf.Clamp(this.GetComponent<ScrollRect>().verticalNormalizedPosition,0,1); int num = Mathf.RoundToInt(max - max*pos); Debug.Log(num); this.GetComponent<ScrollRect>().verticalNormalizedPosition = Mathf.RoundToInt(max*pos)/max; } } |
簡単だけどスクロール位置はトップが1でボトムが0なので反転させてるのに注意。
このスクリプトをスクロールビューにくっつけると、
こんな感じでドラムロール式の選択が出来るようになる。
あとは必要なだけ用意してコントローラーの関数を呼び出すなり、パブリック変数に入れて参照するなりしてドラムの役割と num を渡してやれば使えるようになります。