private void Initialize() { if (initialized) { return; } titleContent = new GUIContent("CompressCheckWindow"); minSize = new Vector2(650f, 450f); var config = TextureAssetTunerConfig.Instance; viewMode = ViewMode.SelectFolder; assetViewMode = AssetViewMode.Asset; tabprevIcon = EditorGUIUtility.IconContent("tab_prev"); viewToolZoomIcon = EditorGUIUtility.IconContent("ViewToolZoom"); compressFolderInfos = new CompressFolderInfo[0]; // Initialize search view. compressFolderScrollView = new CompressFolderScrollView(); compressFolderScrollView.AssetViewMode = assetViewMode; compressFolderScrollView.OnSearchRequestAsObservable() .Subscribe(x => { var infos = GetCompressFolderInfo(new Object[] { x }); if (infos.Any()) { var info = infos.FirstOrDefault(); textureAssetInfos = info.textureAssetInfos; textureAssetInfoScrollView.Contents = GetFilteredTextureAssetInfos(); viewMode = ViewMode.SearchResult; var index = compressFolderInfos.IndexOf(y => y.folder == info.folder); if (index != -1) { compressFolderInfos[index] = info; } Repaint(); } }) .AddTo(Disposable); compressFolderScrollView.Contents = config.CompressFolders; // Initialize result view. textureAssetInfoScrollView = new TextureAssetInfoScrollView(); textureAssetInfoScrollView.AssetViewMode = assetViewMode; initialized = true; Show(); }
protected override void DrawHeaderContent() { GUILayout.Space(5f); EditorGUI.BeginChangeCheck(); var mode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f)); if (EditorGUI.EndChangeCheck()) { assetViewMode = mode; } GUILayout.Space(4f); }
void OnGUI() { var e = Event.current; if (textAreaStyle == null) { textAreaStyle = GUI.skin.GetStyle("TextArea"); textAreaStyle.alignment = TextAnchor.MiddleLeft; textAreaStyle.wordWrap = false; textAreaStyle.stretchWidth = true; } GUILayout.Space(3f); if (current != null) { using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f)); GUILayout.Space(5f); EditorGUI.BeginChangeCheck(); searchText = EditorGUILayout.TextField(string.Empty, searchText, "SearchTextField", GUILayout.Width(200f)); if (EditorGUI.EndChangeCheck()) { dependencies = GetDependencies(current); scrollPosition = Vector2.zero; } if (GUILayout.Button(string.Empty, "SearchCancelButton", GUILayout.Width(18f))) { searchText = string.Empty; GUIUtility.keyboardControl = 0; dependencies = GetDependencies(current); scrollPosition = Vector2.zero; } } GUILayout.Space(3f); var targetAsset = AssetDatabase.LoadMainAssetAtPath(current.AssetPath); EditorGUILayout.ObjectField(targetAsset, typeof(Object), false); GUILayout.Space(3f); if (dependencies.Any()) { EditorLayoutTools.Title("Dependencies"); GUILayout.Space(-2f); using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition)) { using (new ContentsScope()) { foreach (var assetPath in dependencies) { switch (assetViewMode) { case AssetViewMode.Asset: { var asset = AssetDatabase.LoadMainAssetAtPath(assetPath); EditorGUILayout.ObjectField(asset, typeof(Object), false); } break; case AssetViewMode.Path: { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.SelectableLabel(assetPath, textAreaStyle, GUILayout.Height(16f)); if (GUILayout.Button("select", EditorStyles.miniButton, GUILayout.Width(50f), GUILayout.Height(16f))) { var asset = AssetDatabase.LoadMainAssetAtPath(assetPath); Selection.activeObject = asset; } } } break; } GUILayout.Space(1f); } scrollPosition = scrollViewScope.scrollPosition; } } } else { EditorGUILayout.HelpBox("This object has no dependencies.", MessageType.Warning); } } else { EditorGUILayout.HelpBox("Drag and drop asset.", MessageType.Info); } // ドロップエリア. switch (Event.current.type) { case EventType.DragUpdated: case EventType.DragPerform: var validate = ValidateDragAndDrop(DragAndDrop.objectReferences); DragAndDrop.visualMode = validate ? DragAndDropVisualMode.Copy : DragAndDropVisualMode.Rejected; if (e.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); DragAndDrop.activeControlID = 0; if (validate) { Set(DragAndDrop.objectReferences.FirstOrDefault()); } } break; } }
private void DrawContents() { var labelBackgroundColor = new Color(0.2f, 0.8f, 0.5f, 0.8f); EditorLayoutTools.DrawLabelWithBackground("ShaderVariantCollection", labelBackgroundColor, EditorLayoutTools.LabelColor); EditorGUI.BeginChangeCheck(); shaderVariantCollection = EditorLayoutTools.ObjectField(shaderVariantCollection, false); if (EditorGUI.EndChangeCheck()) { targetFolder = null; shaderInfos.Clear(); scrollPosition = Vector2.zero; } GUILayout.Space(2f); EditorLayoutTools.DrawLabelWithBackground("TargetFolder", labelBackgroundColor, EditorLayoutTools.LabelColor); EditorGUI.BeginChangeCheck(); targetFolder = EditorLayoutTools.ObjectField(targetFolder, false); if (EditorGUI.EndChangeCheck()) { if (!UnityEditorUtility.IsFolder(targetFolder)) { targetFolder = null; } shaderInfos.Clear(); scrollPosition = Vector2.zero; } GUILayout.Space(2f); if (shaderVariantCollection != null) { if (shaderInfos.IsEmpty()) { EditorGUILayout.HelpBox("Please search shader.", MessageType.Info); } else { using (new EditorGUILayout.HorizontalScope()) { EditorLayoutTools.DrawLabelWithBackground("Shaders", labelBackgroundColor, EditorLayoutTools.LabelColor); assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f)); } using (new EditorGUILayout.HorizontalScope()) { if (GUILayout.Button("add all", GUILayout.Width(120f))) { shaderInfos.ForEach(x => x.add = true); } if (GUILayout.Button("remove all", GUILayout.Width(120f))) { shaderInfos.ForEach(x => x.add = false); } GUILayout.FlexibleSpace(); } using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition)) { using (new ContentsScope()) { foreach (var shaderInfo in shaderInfos) { using (new EditorGUILayout.HorizontalScope()) { shaderInfo.add = EditorGUILayout.Toggle(shaderInfo.add, GUILayout.Width(20f)); switch (assetViewMode) { case AssetViewMode.Asset: EditorLayoutTools.ObjectField(shaderInfo.shader, false, GUILayout.Height(15f)); break; case AssetViewMode.Path: EditorGUILayout.SelectableLabel(shaderInfo.assetPath, GUILayout.Height(15f)); break; } } GUILayout.Space(2f); } } scrollPosition = scrollViewScope.scrollPosition; } } GUILayout.Space(2f); GUILayout.FlexibleSpace(); using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (GUILayout.Button("Search", GUILayout.Width(150f))) { BuildShaderInfos(); } GUILayout.Space(20f); using (new DisableScope(shaderInfos.IsEmpty())) { if (GUILayout.Button("Update", GUILayout.Width(150f))) { ApplyShaderVariantCollection(); } } GUILayout.FlexibleSpace(); } } else { EditorGUILayout.HelpBox("Select shaderVariant file.", MessageType.Info); } }
void OnGUI() { if (!initialized) { Initialize(); } EditorGUILayout.Separator(); using (new EditorGUILayout.HorizontalScope()) { var config = TextureAssetTunerConfig.Instance; if (GUILayout.Button(viewToolZoomIcon, EditorStyles.miniButton, GUILayout.Width(24f), GUILayout.Height(15f))) { var allFolders = config.CompressFolders; compressFolderInfos = GetCompressFolderInfo(allFolders); textureAssetInfos = null; viewMode = ViewMode.SelectFolder; Repaint(); } EditorGUILayout.ObjectField(config, typeof(TextureAssetTunerConfig), false, GUILayout.Width(400f)); if (viewMode == ViewMode.SearchResult) { if (GUILayout.Button(tabprevIcon, EditorStyles.miniButton, GUILayout.Width(30f), GUILayout.Height(15f))) { viewMode = ViewMode.SelectFolder; compressFolderScrollView.Contents = config.CompressFolders; } } GUILayout.FlexibleSpace(); EditorGUI.BeginChangeCheck(); assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f)); if (EditorGUI.EndChangeCheck()) { compressFolderScrollView.AssetViewMode = assetViewMode; textureAssetInfoScrollView.AssetViewMode = assetViewMode; Repaint(); } var originLabelWidth = EditorLayoutTools.SetLabelWidth(70f); EditorGUI.BeginChangeCheck(); failedOnly = EditorGUILayout.Toggle("Failed Only", failedOnly, GUILayout.Width(90f)); if (EditorGUI.EndChangeCheck()) { if (viewMode == ViewMode.SearchResult) { textureAssetInfoScrollView.Contents = GetFilteredTextureAssetInfos(); } Repaint(); } EditorLayoutTools.SetLabelWidth(originLabelWidth); GUILayout.Space(5f); } EditorGUILayout.Separator(); EditorLayoutTools.DrawLabelWithBackground("Assets"); switch (viewMode) { case ViewMode.SelectFolder: compressFolderScrollView.CompressFolderInfos = compressFolderInfos; compressFolderScrollView.Draw(); break; case ViewMode.SearchResult: textureAssetInfoScrollView.Draw(); break; } }
void OnGUI() { GUILayout.Space(5f); using (new EditorGUILayout.HorizontalScope()) { GUILayout.Space(5f); using (new EditorGUILayout.VerticalScope()) { GUILayout.Space(5f); using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); assetViewMode = (AssetViewMode)EditorGUILayout.EnumPopup(assetViewMode, GUILayout.Width(60f)); GUILayout.Space(5f); string before = searchText; string after = EditorGUILayout.TextField(string.Empty, before, "SearchTextField", GUILayout.Width(200f)); if (before != after) { searchText = after; scrollPosition = Vector2.zero; } if (GUILayout.Button(string.Empty, "SearchCancelButton", GUILayout.Width(18f))) { searchText = string.Empty; GUIUtility.keyboardControl = 0; scrollPosition = Vector2.zero; } } GUILayout.Space(5f); var list = GetMatchOfList(); if (list.Any()) { using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition)) { foreach (var item in list) { using (new EditorGUILayout.HorizontalScope()) { var asset = assetObjectByAssetPath.GetValueOrDefault(item.assetPath); if (asset != null) { EditorGUILayout.LabelField(item.GetSizeText(), GUILayout.Width(70f)); EditorGUILayout.LabelField(string.Format("{0}%", item.ratio), GUILayout.Width(50f)); switch (assetViewMode) { case AssetViewMode.Asset: EditorGUILayout.ObjectField(asset, typeof(Object), false, GUILayout.MinWidth(250f)); break; case AssetViewMode.Path: EditorGUILayout.DelayedTextField(item.assetPath, GUILayout.MinWidth(250f)); break; } var isInvalidAsset = !builtInAssetTargetPaths.Any(x => item.assetPath.StartsWith(x)) || // 指定ディレクトリ以外のディレクトリに存在. ignoreBuiltInAssetTargetPaths.Any(x => item.assetPath.StartsWith(x)) || // 含まれてはいけないディレクトリに存在. ignoreBuiltInFolderNames.Any(x => item.assetPath.Split('/').Contains(x)); // 含まれていけないフォルダ名が含まれているか. var titleStyle = new EditorLayoutTools.TitleGUIStyle(); // 指定されたAsset置き場にない or 同梱しないAsset置き場のAssetが混入. if (isInvalidAsset) { titleStyle.backgroundColor = Color.red; titleStyle.labelColor = Color.gray; titleStyle.width = 85f; EditorLayoutTools.Title("InvalidAsset", titleStyle); } // ファイルサイズが指定された値を超えている. if (warningAssetSize <= item.size) { titleStyle.backgroundColor = Color.yellow; titleStyle.labelColor = Color.gray; titleStyle.width = 80f; EditorLayoutTools.Title("LargeAsset", titleStyle); } GUILayout.Space(5f); } } } scrollPosition = scrollViewScope.scrollPosition; } } else { EditorGUILayout.HelpBox("Asset Not Found.", MessageType.Info); } GUILayout.Space(5f); } GUILayout.Space(5f); } }