切換
舊版
前往
大廳
主題

Unity 筆記 - ListScrollRect

過水千影 | 2017-05-17 12:32:26 | 巴幣 0 | 人氣 497

- 版本 Unity 5.5.1f1
- 系統 Unity uGUI
- 插件 ListScrollRect(Asset Store $10)

  看來還是有機會寫到第二篇,一年一篇的產量真是精美;主要還是因為新工作要處理的專案有點多,一時間要學很多新東西,人手不足的情況下自然就是盡量用第三方解決方案。

【問題】
  ScrollView 具體在哪個版本開始有的我不確定,總之要做捲動清單的話,這是個現成還蠻快速的功能(我記得之前要自己用 UI 搭配 Scrollbar 慢慢組?)。總之清單在一般使用上不會有太大問題,但同時有幾百個甚至幾千個清單物件要使用的時候,整個程式就會卡住。

【狀況】
  1. App 裡常見的留言、動態、新聞、聊天等系統,往往會需要大量的清單物件
  2. 如果遊戲中在商店或背包介面產生大量物件的話也可能發生同樣問題

【解法】
  當然就是這個插件上場的時候了,最主要倚賴兩個 Script,用 ListScrollRect.cs 來取代原本的 ScrollRect,並且使用繼承了 IContentFiller 的 Script 來填充清單物件;在實際運作的情況下,它會以 Object Pool 的概念來對超出 viewport 的物件進行回收管理,也就不會因為有大量的物件在看不到的地方造成記憶體問題。

  ListScrollRect.cs 跟原本的 ScrollRect 在 Editor 裡的設定雷同,差別只是要指定自己實作的 ContentFiller 給它;產生 Scroll View 物件後,把 ScrollRect 移除替換成 ListScrollRect 就可以開始進行設定,以下是幾個要注意的地方。

  1. Content 不需要利用 Layout Group 跟 Content Size Fitter 來控制 Content 的大小及其子物件,那些 ListScrollRect 都會處理。

  2. 清單物件的 Anchor Presets (對齊設定),直向清單需改為 stretch-top,橫向則為 left-stretch。

  3. 參考內帶的 SimpleContentFiller 去寫,產生物件、填入資料的控制都在 GetListItem 函數裡,依賴第一個 int 參數來取得對應的 index 資料填入。

   至於控制多種物件清單的方法裡面的各種 Demo 都有,當然把 Filler 寫進自己的 Script 也可以,不過一般我是另外開一個專用的 Filler 寫會比較不會搞混。至於能組成什麼樣子的清單就看個人造化了。

【※】
    Object Pool 別問我。

創作回應

更多創作