Massive Picker

画面外にでたアイテムをリサイクルすることでパフォーマンスを向上させたPickerです。
アイテムのサイズが固定になるデメリットがあります. その代わりに大量のアイテムを扱うことができます.
このページではMassiveVerticalPickerを例にMassivePickerの構造を説明します.
MassiveVerticalPickerはメニューの [GameObject]/[UI]/[Picker]/[Massive Vertical Picker]をクリックすることで追加できます.

Picker と同様のオブジェクトについては説明していません.

MassiveVerticalPicker

ルートオブジェクトです.

../_images/massive1.png

Column

カラムの本体です. 複数のカラムを配置する場合はこのオブジェクトを複製(Ctrl+D)してください.
MassivePickerScrollRectコンポーネントがアタッチされています.

MassivePickerScrollRectコンポーネントの設定項目

多くの項目は Picker と共通です. ここではMassivePickerScrollRect特有のものだけを説明します.

../_images/massive3.png

項目

説明

Deactive Item On Awake

Awake()上でItemSourceに設定されたオブジェクトに対しSetActive(false)を呼ぶことをセットするフラグです.
Item Source がシーン上に配置されているオブジェクトであれば
このフラグにtrueをセットすることでそのオブジェクトを不可視にできます.
Item Source がResources上のプレハブであればこのフラグをセットする必要はありません.

Item Source

アイテムのコピー元となるGameObjectです.
MassivePickerItemを継承したコンポーネントがアタッチされている必要があります.
Deactive Item On Awake がセットされている場合、このオブジェクトのSetActive(false)が呼ばれます.

Item Size

アイテムのサイズです.

Item Count

アイテムの個数です.

Content

MassivePickerLayoutGroup がアサインされています.
アイテムは自動生成されるため子供へのアイテムの配置は不要です.
../_images/massive4.png

アイテムのセット方法

MassivePickerではアイテムは次のフローで生成されます.
1. Instantiate( massivePickerScrollRect.itemSource ) によりアイテムが複製され、 Contentの子供に配置されます.
2. 複製されたアイテムに対し item.GetComponent<MassivePickerItem>().SetItemContents( scrollRect, itemIndex ) が呼ばれその内容がセットされます.

もしアイテムが画面外に配置され不要になった場合, SetActive(false) が呼ばれアイテムは不可視になります.
再び画面外に配置されたときは SetActive(true)とSetItemContents() が呼ばれアイテムは可視状態になります.

MassiveVerticalPickerではアイテムにExampleStringItemがアタッチされています.
このスクリプトはアイテムのテキストに "Item"+itemIndex をセットします.
../_images/massive6.png

ItemSource

表示されるアイテムのコピー元となるオブジェクトです.
MassiveVerticalPicker ではPicker内部に配置されていますが, 配置場所に制限はありません.
../_images/massive5.png

その他のオブジェクト

Pickerと同様です.