有關Editor的記錄(一)
//ScrollView滾動卡頓優化
為什麼要對ScrollView滾動卡頓做優化?是因為在使用 Unity 開發遊戲的時候,經常會需要用到資料配置,方式可能是CSV、JSON等等。為了可以方便地檢視修改資料,通常使用實現ScrollView在 Unity 編輯器裡面以列表的形式檢視資料。
當資料量大的時候,滾動檢視會發現卡頓不斷,測試程式碼如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
滑鼠拖動滾動條滾動的時候,可以明顯發現滾動條卡頓延遲跟著滑鼠動:
解決
優化的思路就是隻繪製當前可視的區域,自 Unity 5.6 開始已經提供TreeView
控制元件,自帶支援大資料集, 詳見https://docs.unity3d.com/560/Documentation/ScriptReference/IMGUI.Controls.TreeView.BuildRoot.html
如果還沒使用 Unity 5.6,那麼可以參考它的實現方式。將Layout自動佈局方式改成給定矩形來繪製,這樣方便知道每行的高度和總的內容高度,再根據滾動條的座標來計算獲取當前顯示的起始行和結束行,只繪製需要顯示的行內容。
程式碼修改如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
|
再次滑鼠拖動滾動條滾動的時候,可以明顯發現滾動條流暢許多:
編輯時的問題
因為不是繪製全部控制元件,那麼當使用編輯框的時候,彈出的編輯控制元件不會跟隨著滾動,如下所示:
那麼就當滾動的時候,結束當前正在編輯的項吧,修改OnDrawListView2
函式:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
自動佈局
如果還是想使用自動佈局方式來繪製項的話,那麼可以使用GUILayout.Space
來佔用不需要繪製的區域。
///
相關文章
- Unity 的 Surface Shader有關記錄Unity
- 關於fsdb的一些記錄
- 關於 JMeter 5.4.1 的一點記錄JMeter
- 記錄一些有關資料庫操作的擴充套件包資料庫套件
- 記錄一個關於變數命名的事情變數
- 一個關於ace-editor編輯器的問題
- 關於vue-baidu-map的一些記錄VueAI
- 值得記錄的(一)
- 關於Laravel中的Redis如何使用Lua的一點記錄LaravelRedis
- 記錄一下使用左關聯的一次查詢(可樂的筆記)筆記
- Laravel 記錄相關Laravel
- ePWM相關記錄
- linux相關記錄Linux
- 關於javascript原型鏈的記錄JavaScript原型
- MySQL 關聯表取最新一條記錄方案MySql
- 關於使用雲伺服器遇到的問題記錄(一)伺服器
- 記錄一次homestead意外關閉導致的錯誤
- 更新一張與另一張表關聯的連線欄位記錄
- 記一次關於 timestamp 無法檢索時分秒的排坑記錄
- 記錄一些很酷的套路,有時間再展開寫
- Windows 記錄一次磁碟相關的PC卡頓問題Windows
- 筆記:editor.md 常用 api筆記API
- 關聯物件(防止自己忘記記錄)物件
- 2020年是有記錄以來最熱的一年 追平2016年紀錄
- 有毒的學Pin記錄(一)
- 關於SpringBoot的外部化配置使用記錄Spring Boot
- Openwrt(LUCI相關記錄1)
- Spring相關問題記錄Spring
- 關於webpack問答記錄...Web
- Android application類相關記錄AndroidAPP
- QT/c++相關記錄QTC++
- 記錄一次RPC服務有損上線的分析過程RPC
- 有關golang通道的面試筆記Golang面試筆記
- 對HashMap的一次記錄HashMap
- MySQL的一些操作記錄MySql
- Docker命令的一些記錄Docker
- 有關 ThreadLocal 的一切thread
- Redis 使用記錄(一)Redis