関数開発では、ページによっては一度に数十、数百ものアイテムをインスタンス化する必要がある場合がよくあります.そのときのデータ量に応じて複数のサブアイテムをインスタンス化すると、メモリ使用量が非常に大きくなります.また、UGUI はビューポート領域を超えてオブジェクトを描画するため、画面が突然動かなくなります。
この時点で、インスタンス化の手順を最適化する必要があります。
1. オブジェクト プールの導入:
まず、リストをスライドすると常にビューポート領域内の項目のみが表示され、ビューポート領域外の項目は表示されません。次に、ビューポート領域を超えたアイテムをリサイクルプールに入れ、新しいアイテムが必要なときに直接リサイクルプールに移動して新しいアイテムを検索し、アイテムのリサイクルを実現して、メモリ使用量を削減することは可能ですか? . 同時に、コンテンツ サイクルには常に少数の比較的固定されたアイテムしかないため、レンダリングの負担も大幅に軽減できます。
//获取可用的item
ItemCell GetItem(int index) //index代表获取到item后,该item当前需要显示的目标index
{
//为什么这里不用GameObject,而用自定义的组件ItemCell?
//解答:ItemCell是自定义的脚本,用于对item物体宽高、msg等进行刷新和显示控制,单纯的GameObject是无法达成这样的效果
ItemCell item;
//获取item有两种方式——这个很重要:
//第一种:在当前item列表中查找
//当缓慢的上滑滚动条时,为了item频繁刷新导致的视觉疲劳,此时不应该直接去回收池中获取item,而应该先在当前显示的item列表中查询是否有可用的对象。
//当然直接的刷新item列表是不可避免的,如从当前位置快速的滑动到某地,此时上一