编辑器SearchField+ReorderableList使用
1 private SearchField _searchField; 2 private string _searchText; 3 private ReorderableList _choicesList; 4 private List<string> _allListItems; 5 6 public override void OnInspectorGUI() 7 { 8 if (null == _searchField) 9 _searchField = new SearchField(); 10 var newText = _searchField.OnToolbarGUI(_searchText, new UnityEngine.GUILayoutOption[0]); 11 if (newText != _searchText) 12 { 13 _searchText = newText; 14 if (null != _allListItems) 15 _allListItems.Clear(); 16 if (!string.IsNullOrEmpty(_searchText)) 17 { 18 if (null == _allListItems) _allListItems = new List<string>(); 19 for (var i = 0; i < 10; ++i) 20 _allListItems.Add("" + i); 21 CreateListView(); 22 } 23 } 24 if (null != _allListItems && _allListItems.Count > 0 && _choicesList != null) 25 _choicesList.DoLayoutList(); 26 } 27 28 void CreateListView() 29 { 30 if (null != _choicesList) return; 31 32 _choicesList = new ReorderableList(_allListItems, typeof(string), false, false, false, false); 33 _choicesList.drawElementCallback = (rect, index, active, focused) => 34 { 35 rect.y += 2; 36 var half = rect.width / 2; 37 EditorGUI.LabelField(new UnityEngine.Rect(rect.x, rect.y, half, EditorGUIUtility.singleLineHeight), "index:" + index); 38 EditorGUI.LabelField(new UnityEngine.Rect(rect.x + half, rect.y, half, EditorGUIUtility.singleLineHeight), _allListItems[index]); 39 }; 40 41 _choicesList.onSelectCallback = (list) => 42 { 43 _choicesList = null; 44 _searchText = null; 45 }; 46 }
效果: