以前紹介しましたが、GitHub に上げたので改めて紹介します。
Enhanced 使いたいけど、無料がいい…そんな人に向いています。
UI/ScrollView の強化点
描画処理の高速化(10000行あっても処理が軽い)
表示している範囲のみ描画するようキャッシュしているので、メモリの許す限り行数を増やしても構いません。
キーボード入力も対応(上下左右、ページアップダウン、決定、キャンセル)
サンプル右のようなサブメニューのある構成でもキー入力のみで選択可能です。
細かいオプション
- センタリング描画
- スクロールバーのフェード効果
- 選択した項目が中央に吸着する効果
基本的に UI/ScrollView の拡張なので、元からある機能はそのまま使えます。
使い方
SampleUnity.unity を元にして説明します。
- 1行にあたるノード(ScrollView でいう Content に配置する GameObject)オブジェクトを作成します。
NodeSimple が左ビューのノード
NodeMulti が右ビューのノード
NodeSubButton は NodeMulti 内のボタン
- UI/ScrollView に TableScrollViewer をアタッチします。
SourceNode に 1 で作成したノードを設定します。
- スクリプトで、TableScrollViewer にテーブル(クラスリスト等)を設定します。
SetTable() で表示したい内容を設定、アイテムが選択(もしくはキャンセル入力)されると OnSelectVertical() イベントがコール、キー入力が発生すると OnKeyDown() がコールされます。
SimpleScrollViewTest が左ビュー、MultiScrollViewTest が右ビューのコードです。
public class SimpleScrollviewTest : MonoBehaviour { List<object> viewerList = new List<object>(); void Awake() { TableScrollViewer viewer = this.gameObject.GetComponentInChildren<TableScrollViewer>(); for (int i = 0; i < 16; i++) { viewerList.Add(i); } viewer?.Initialize(); viewer?.SetTable(viewerList.ToArray()); viewer?.OnSelect.AddListener(OnSelectVertical); viewer?.OnKeyDown.AddListener(OnKeyDown); } public void OnSelectVertical(object[] table, int itemIndex, int subIndex, bool isCancel) { int row = (int)table[itemIndex]; Debug.Log($"selected vertical: {row}"); } public void OnKeyDown(TableScrollViewer.KeyDownArgs args) { if (Input.GetKeyDown(KeyCode.Space) == true) { args.Flag = TableScrollViewer.eKeyMoveFlag.Select; } else if (Input.GetKeyDown(KeyCode.UpArrow) == true) { args.Flag = TableScrollViewer.eKeyMoveFlag.Up; } else if (Input.GetKeyDown(KeyCode.DownArrow) == true) { args.Flag = TableScrollViewer.eKeyMoveFlag.Down; } } }
その他、細かい部分については以前の記事をご覧ください。