Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit de2e8bd

Browse files
准备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)

AltStyle によって変換されたページ (->オリジナル) /