Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit de2e8bd

Browse files
committed
准备AssetGroup编辑器
1 parent 18f8d88 commit de2e8bd

File tree

4 files changed

+358
-1
lines changed

4 files changed

+358
-1
lines changed

GameFramework/Editor/AssetGroupEditor/AssetGroupEditor.cs

Lines changed: 255 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using UnityEditor;
5+
using UnityEditor.EditorTools;
56
using UnityEngine;
67

78
namespace Wanderer.GameFramework
@@ -13,8 +14,261 @@ public class AssetGroupEditor:EditorWindow
1314
private JsonData _newData;
1415
private JsonData _selectFoldersJsonData;
1516
private Vector2 _scrollView = Vector2.zero;
17+
private string[] _assetFilter;
1618

1719

18-
}
20+
[MenuItem("Tools/Assets Management/Asset Group #&G")]
21+
private static void OpenWindow()
22+
{
23+
GetWindow<AssetGroupEditor>("Asset Group Editor");
24+
}
25+
26+
private void OnEnable()
27+
{
28+
_config = ProjectSettingsConfig.LoadJsonData(_configName);
29+
if (_config == null)
30+
{
31+
_config = new JsonData();
32+
_config.SetJsonType(JsonType.Array);
33+
}
34+
_newData = new JsonData();
35+
36+
_assetFilter = AssetFilterEditor.GetAssetFilters().ToArray();
37+
}
38+
39+
private void OnDisable()
40+
{
41+
_config = null;
42+
_newData = null;
43+
}
44+
List<int> linexs = new List<int>();
45+
46+
private void OnGUI()
47+
{
48+
linexs.Clear();
49+
50+
//Ö÷´°¿Ú
51+
GUILayout.BeginHorizontal();
52+
GUILayout.FlexibleSpace();
53+
if (GUILayout.Button("Apply", GUILayout.Width(100)))
54+
{
55+
ProjectSettingsConfig.SaveJsonData(_configName, _config);
56+
EditorUtility.DisplayDialog("Save Config", "Data saved successfully!", "OK");
57+
}
58+
GUILayout.EndHorizontal();
59+
60+
_scrollView = GUILayout.BeginScrollView(_scrollView);
61+
62+
GUILayout.BeginHorizontal("box", GUILayout.Width(Screen.width));//GUILayout.Width(100)
63+
GUILayout.Label("Group Name", GUILayout.Width(150));
64+
Rect latRect = GUILayoutUtility.GetLastRect();
65+
linexs.Add((int)(latRect.x+ latRect.width));
66+
67+
GUILayout.Label("Annotation", GUILayout.Width(100));
68+
latRect = GUILayoutUtility.GetLastRect();
69+
linexs.Add((int)(latRect.x + latRect.width));
70+
71+
GUILayout.Label("Variant", GUILayout.Width(100));
72+
latRect = GUILayoutUtility.GetLastRect();
73+
linexs.Add((int)(latRect.x + latRect.width));
74+
75+
GUILayout.Label("Filter", GUILayout.Width(100));
76+
latRect = GUILayoutUtility.GetLastRect();
77+
linexs.Add((int)(latRect.x + latRect.width));
78+
79+
GUILayout.Label("Search In Folders", GUILayout.Width(300));
80+
latRect = GUILayoutUtility.GetLastRect();
81+
linexs.Add((int)(latRect.x + latRect.width));
82+
83+
GUILayout.Label("Split", GUILayout.Width(100));
84+
latRect = GUILayoutUtility.GetLastRect();
85+
linexs.Add((int)(latRect.x + latRect.width));
86+
87+
GUILayout.Label("Split Count", GUILayout.Width(100));
88+
latRect = GUILayoutUtility.GetLastRect();
89+
linexs.Add((int)(latRect.x + latRect.width));
90+
91+
GUILayout.Label("Force Update", GUILayout.Width(100));
92+
latRect = GUILayoutUtility.GetLastRect();
93+
linexs.Add((int)(latRect.x + latRect.width));
94+
95+
GUILayout.Label("Preload");
96+
latRect = GUILayoutUtility.GetLastRect();
97+
linexs.Add((int)(latRect.x + latRect.width));
98+
99+
GUILayout.EndHorizontal();
100+
101+
int configCount = _config.Count;
102+
if (configCount > 0)
103+
{
104+
for (int i = 0; i < configCount; i++)
105+
{
106+
GUILayout.BeginHorizontal("box", GUILayout.Width(Screen.width));
107+
DrawJsonData(_config[i]);
108+
if (GUILayout.Button("-", GUILayout.Width(30)))
109+
{
110+
_config.Remove(_config[i]);
111+
GUIUtility.ExitGUI();
112+
}
113+
GUILayout.EndHorizontal();
114+
}
115+
}
116+
117+
foreach (var item in linexs)
118+
{
119+
Rect lineRect = new Rect(item, 0, 1, Screen.height);
120+
EditorGUI.DrawRect(lineRect, new Color(0.2196079f, 0.2196079f, 0.2196079f, 1.0f)*1.5f);
121+
}
122+
123+
GUILayout.EndScrollView();
124+
125+
126+
GUILayout.BeginHorizontal("box", GUILayout.Width(Screen.width));
127+
DrawJsonData(_newData);
128+
if (GUILayout.Button("+", GUILayout.Width(30)))
129+
{
130+
bool addResult = false;
131+
if (_newData.Keys.Count > 0)
132+
{
133+
JsonData selectFoldersJsonData = _newData["SearchInFolders"];
134+
if (selectFoldersJsonData != null && selectFoldersJsonData.Count > 0)
135+
{
136+
_config.Add(_newData);
137+
_newData = new JsonData();
138+
addResult = true;
139+
}
140+
}
141+
142+
if (!addResult)
143+
{
144+
EditorUtility.DisplayDialog("Tips", "The search folder cannot be empty!", "OK");
145+
}
146+
147+
}
148+
GUILayout.EndHorizontal();
149+
150+
151+
152+
}
153+
154+
//»æÖÆjsondata
155+
private void DrawJsonData(JsonData jsonData)
156+
{
157+
string key = "AssetBundleName";
158+
if (!jsonData.Keys.Contains(key))
159+
{
160+
jsonData[key] = "Game";
161+
}
162+
string content = jsonData[key].ToString();
163+
string newContent = EditorGUILayout.TextField(content, GUILayout.Width(150));
164+
if (!content.Equals(newContent))
165+
{
166+
jsonData[key] = newContent;
167+
}
168+
169+
key = "Annotation";
170+
if (!jsonData.Keys.Contains(key))
171+
{
172+
jsonData[key] = "";
173+
}
174+
content = jsonData[key].ToString();
175+
newContent = EditorGUILayout.TextField(content, GUILayout.Width(100));
176+
if (!content.Equals(newContent))
177+
{
178+
jsonData[key] = newContent;
179+
}
180+
181+
key = "Variant";
182+
if (!jsonData.Keys.Contains(key))
183+
{
184+
jsonData[key] = "";
185+
}
186+
content = jsonData[key].ToString();
187+
newContent = EditorGUILayout.TextField(content, GUILayout.Width(100));
188+
if (!content.Equals(newContent))
189+
{
190+
jsonData[key] = newContent;
191+
}
192+
193+
key = "Filter";
194+
if (!jsonData.Keys.Contains(key))
195+
{
196+
jsonData[key] = 1024;
197+
}
198+
int filter = (int)jsonData[key];
199+
int newFilter = EditorGUILayout.MaskField(filter, _assetFilter, GUILayout.Width(100));
200+
if (filter != newFilter)
201+
{
202+
jsonData[key] = newFilter;
203+
}
204+
205+
key = "SearchInFolders";
206+
if (!jsonData.Keys.Contains(key))
207+
{
208+
jsonData[key] = new JsonData();
209+
jsonData[key].SetJsonType(JsonType.Array);
210+
}
211+
JsonData selectFoldersJsonData = jsonData[key];
212+
content = selectFoldersJsonData.ToJson();
213+
newContent = EditorGUILayout.TextField(content, GUILayout.Width(300));
214+
if (!content.Equals(newContent))
215+
{
216+
var jd = JsonMapper.ToObject(newContent);
217+
if (jd != null)
218+
{
219+
jsonData[key] = jd;
220+
}
221+
}
222+
key = "Split";
223+
if (!jsonData.Keys.Contains(key))
224+
{
225+
jsonData[key] = false;
226+
}
227+
bool isSplit = (bool)jsonData[key];
228+
bool newIsSplit = EditorGUILayout.Toggle(isSplit, GUILayout.Width(100));
229+
if (isSplit != newIsSplit)
230+
{
231+
jsonData[key] = newIsSplit;
232+
}
233+
234+
key = "SplitCount";
235+
if (!jsonData.Keys.Contains(key))
236+
{
237+
jsonData[key] = 1;
238+
}
239+
int splitCount = (int)jsonData[key];
240+
int newSplitCount = EditorGUILayout.IntField(splitCount, GUILayout.Width(100));
241+
if (splitCount != newSplitCount)
242+
{
243+
jsonData[key] = newSplitCount;
244+
}
245+
246+
key = "ForceUpdate";
247+
if (!jsonData.Keys.Contains(key))
248+
{
249+
jsonData[key] = true;
250+
}
251+
bool forceUpdate = (bool)jsonData[key];
252+
bool newForceUpdate = EditorGUILayout.Toggle(forceUpdate, GUILayout.Width(110));
253+
if (forceUpdate != newForceUpdate)
254+
{
255+
jsonData[key] = newForceUpdate;
256+
}
257+
258+
key = "Preload";
259+
if (!jsonData.Keys.Contains(key))
260+
{
261+
jsonData[key] = false;
262+
}
263+
bool preloadUpdate = (bool)jsonData[key];
264+
bool newPreloadUpdate = EditorGUILayout.Toggle(preloadUpdate, GUILayout.Width(70));
265+
if (preloadUpdate != newPreloadUpdate)
266+
{
267+
jsonData[key] = newPreloadUpdate;
268+
}
269+
}
270+
271+
272+
}
19273

20274
}

GameFramework/Editor/Utility.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using UnityEngine;
2+
using System.Collections;
3+
using UnityEditor;
4+
5+
public class EditorGUISplitView
6+
{
7+
8+
public enum Direction {
9+
Horizontal,
10+
Vertical
11+
}
12+
13+
Direction splitDirection;
14+
float splitNormalizedPosition;
15+
bool resize;
16+
public Vector2 scrollPosition;
17+
Rect availableRect;
18+
19+
20+
public EditorGUISplitView(Direction splitDirection) {
21+
splitNormalizedPosition = 0.5f;
22+
this.splitDirection = splitDirection;
23+
}
24+
25+
public void BeginSplitView() {
26+
Rect tempRect;
27+
28+
if(splitDirection == Direction.Horizontal)
29+
tempRect = EditorGUILayout.BeginHorizontal (GUILayout.ExpandWidth(true));
30+
else
31+
tempRect = EditorGUILayout.BeginVertical (GUILayout.ExpandHeight(true));
32+
33+
if (tempRect.width > 0.0f) {
34+
availableRect = tempRect;
35+
}
36+
if(splitDirection == Direction.Horizontal)
37+
scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(availableRect.width * splitNormalizedPosition));
38+
else
39+
scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Height(availableRect.height * splitNormalizedPosition));
40+
}
41+
42+
public void Split() {
43+
GUILayout.EndScrollView();
44+
ResizeSplitFirstView ();
45+
}
46+
47+
public void EndSplitView() {
48+
49+
if(splitDirection == Direction.Horizontal)
50+
EditorGUILayout.EndHorizontal ();
51+
else
52+
EditorGUILayout.EndVertical ();
53+
}
54+
55+
private void ResizeSplitFirstView(){
56+
57+
Rect resizeHandleRect;
58+
59+
if(splitDirection == Direction.Horizontal)
60+
resizeHandleRect = new Rect (availableRect.width * splitNormalizedPosition, availableRect.y, 2f, availableRect.height);
61+
else
62+
resizeHandleRect = new Rect (availableRect.x,availableRect.height * splitNormalizedPosition, availableRect.width, 2f);
63+
64+
GUI.DrawTexture(resizeHandleRect,EditorGUIUtility.whiteTexture);
65+
66+
if(splitDirection == Direction.Horizontal)
67+
EditorGUIUtility.AddCursorRect(resizeHandleRect,MouseCursor.ResizeHorizontal);
68+
else
69+
EditorGUIUtility.AddCursorRect(resizeHandleRect,MouseCursor.ResizeVertical);
70+
71+
if( Event.current.type == EventType.MouseDown && resizeHandleRect.Contains(Event.current.mousePosition)){
72+
resize = true;
73+
}
74+
if(resize){
75+
if(splitDirection == Direction.Horizontal)
76+
splitNormalizedPosition = Event.current.mousePosition.x / availableRect.width;
77+
else
78+
splitNormalizedPosition = Event.current.mousePosition.y / availableRect.height;
79+
}
80+
if(Event.current.type == EventType.MouseUp)
81+
resize = false;
82+
}
83+
}
84+

GameFramework/Editor/Utility/EditorGUISplitView.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)