はじめに
Unity も C# もさわりたてなのでメモリリークとかよろしくない書き方になっているかもしれませんがとりあえず UITableView
みたいな一覧表示ができました。セルを再利用してるから軽いはず(たぶん。。。)。
こんな感じでリスト表示ができてセル押下で選択もできます!
下記の本の「Part3 現場で使える UI 実装ー第2章 uGUI を便利に使うースクロール-Scroll Rect の拡張機能」のソースを参考にしました。
ステップアップUnity──プロが教える現場の教科書 WEB DB PRESS plus 新品価格 |
使い方
- セルを Prefab 化する
Scene
にButton
を置いて Assets にドラッグ&ドロップします。 -
ListViewCell
を継承したスクリプトを作成する1234567891011public class SampleCell : ListViewCell{[SerializeField]private Text _text;public override void UpdateData(int index, object obj){base.UpdateData(index, obj);_text.text = obj as string;}} - Prefab 化したセルにスクリプトを設定する
Scene
にScrollView
を配置するScrollView
にListView
スクリプトを設定する
-
適当なスクリプトを設定して以下の様の記載する
1234567891011121314151617181920212223242526272829public class ListViewHandler : MonoBehaviour, ListViewDataSource{private List<int> _dataList = new List<int>();private ListView _listView;void Start(){for (int i = 0; i < 20; i++){_dataList.Add(i);}GameObject resultObj = GameObject.Find("ListView");_listView = resultObj.GetComponent<ListView> ();_listView.dataSource = this;_listView.selector = delegate (int index) {Debug.Log("テーブルデリゲート: " + index);};_listView.ReloadData();}public object Data(int index) {return _dataList[index].ToString();}public int dataCount {get { return _dataList.Count; }}}
完成!!!
課題
いくつか課題がありますが難しいのであきらめました。
- 画面サイズが変わった場合にセル数がおかしくなる
ScrollView
の高さとセルの高さから必要なセル数を計算する処理を画面サイズ変更時にもやる必要がある? - 上下に無限にスクロールできてしまう
- 指定の位置にコードでスクロールしたい
verticalNormalizedPosition
使えばできるかと思ったのですが難しいのであきらめました。 ReloadData()
後もスクロール位置を保持したい
こちらも難しいのでリロード時は一番上へ戻すようにしました。
2021/05/26 こちらは解決しました!
セルの高さを ScrollView
上と Prefab 化したセルの二箇所で行う必要がある(しないとサイズが合わない)
おわりに
とりあえず UITableView
ぽいものができました。「セクションつけたい!」「セルの高さ可変にしたい!」とか色々やろうと思うと難しいです。。。
もっと UITableView
ぽいやつ探せば何かありそう。
Unity, C# ともにさわり始めたばかりなので何か間違いなどあればご指摘いただけると幸いです。
コメント
[…] UITableView みたいなリスト表示をする | am10 ぶろぐ […]