LoopScrollRect
LoopScrollRect copied to clipboard
當 Rect Transform 都設為 stretch 時,沒有自動呼叫 ReturnToTempPool 來回收 ScrollCell
你好,
我遇到一個問題 當 Rect Transform 都設為 stretch 時,沒有自動呼叫 ReturnToTempPool 來回收 ScrollCell 的問題 所以會產生所有塞入資料數量的 ScrollCell ,然後全部都是顯示的狀態而沒有回收到 Pool 中 然後之後手動滑動後就"有機會"會正常了
只是在我自己的專案,手動滑動後還是會維持在有問題的狀態 然後似乎在某個數值更新後,就會自動去呼叫 ReturnToTempPool 但不知道為什麼會有畫面應該顯示5個,但只顯示4個,少1個的狀況
問題大概是這樣:
原先預期的處理結果:
遇到問題的結果:
能夠重現的範例場景 DemoScene_MultiCellFullScreen.zip
剛剛發現 手動拖動後也不會自動去呼叫 ReturnToTempPool 的重現方法 只要從 LoopHorizontalScrollRectMulti 中 移除 Scrollbar 的元件參考 這時移動就不會馬上更新,要移動夠多才會有機會更新自動去呼叫 ReturnToTempPool
只是不知道為什麼在我自己的專案中 手動拖動很多也不會自動更新自動去呼叫 ReturnToTempPool
能夠重現的範例場景 DemoScene_MultiCellFullScreen2.zip
哈喽,我使用两个附件的场景测试了下没有问题orz
如果说没有自动呼叫ReturnToTempPool
,可以在对应的UpdateItems
里加log输出下contentBounds
和viewBounds
,或者打断点看下为什么没有进到ReturnToTempPool
或者DeleteItemAtEnd/DeleteItemAtStart
的逻辑。这块其实判断的很简单:如果content范围>view范围,那说明内容已经超出所需要的范围了,然后检查头部和尾部能不能回收掉一些~
我是用 Unity 2020.3.30 不知道有沒有關係? 想說遠端回去公司電腦測試一下 但不知道為什麼unity 現在無法顯示畫面 不知道跟換螢幕後,都換成用 DisplayPort 的線有沒有關係...
這是完整的專案檔案 雖然大概沒什麼差別? LoopScrollRect_Pro.zip
我目前手头测试的版本是2020.3.33f1,还是比较接近的~ 完整档案我这边也是正常的,待我下一个2020.3.30再测试一下。
无法显示页面是指家里的启动白屏嘛,也许可以尝试下检查显卡驱动或者Editor.log?
就這樣 Unity 只看的到 上面的工具列
下面畫面都是黑的沒有更新畫面
有一个骚套路可以试一下,譬如强制使用vulkan或者d3d12渲染 (具体参考https://docs.unity3d.com/Manual/EditorCommandLineArguments.html)
看上去确实像是RHI层挂掉了
遠端Unity 編輯器沒畫面的問題 用 -force-vulkan 測試畫面一樣還是全黑的 用 -force-d3d12 就有畫面了
然後我上傳的測試專案 什麼都沒改 目前 ScrollCell 數量也是正常的跟你的截圖是一樣的 奇怪了...
-force-d3d12
如果有画面那说明确实是和驱动相关,我之前遇到过两个情况可以参考下: 1) 升级驱动 2) 也许和远程桌面有关,参考微软远程桌面开启显卡加速
如果暂时不能稳定复现的话就有点麻烦了,只能下次遇到的时候想办法保存场景
剛剛又調整了測試的專案 將物件數量加到40左右
拉到最後面
原先預期 Content上的數量 會比 顯示的數量 還要多左右各1個
所以約是 8 + 2 = 10個
但實際上 Content 上面的數量會是13個左右
前後多拖曳幾次後,數量會不太一樣
能夠重現的範例專案 LoopScrollRect_Test.zip
这里比较难控制在外面有且仅有一个,目前的策略是估算一个threshold(必须大于cell的大小)来实现预加载一个,保证拖拽时候的顺滑。然后有两个地方会影响倒
- https://github.com/qiankanglai/LoopScrollRect/commit/78714f9fd2427753cd9e3dd0e50a449d2c7f2aa9 里我换了个方式修复#128 同时避免闪烁,已经提交了~
- 代码里我目前写死threshold是取MaxCellSize的1.5倍,可以改成1.1来进一步压低(这里改小的好处是两侧预加载的cell会变少,但是快速滑动的时候可能会有一丝卡顿) https://github.com/qiankanglai/LoopScrollRect/blob/78714f9fd2427753cd9e3dd0e50a449d2c7f2aa9/Runtime/LoopScrollRectBase.cs#L1058 https://github.com/qiankanglai/LoopScrollRect/blob/78714f9fd2427753cd9e3dd0e50a449d2c7f2aa9/Runtime/LoopScrollRectBase.cs#L1141
剛剛測試似乎沒問題了 感謝修正