public override void OnInspectorGUI() { var instance = target as UIRawImage; var rawImage = instance.RawImage; if (rawImage == null) { return; } GUILayout.Space(4f); DrawDefaultScriptlessInspector(); using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.PrefixLabel("Dummy Texture"); EditorGUI.BeginChangeCheck(); textureAsset = EditorGUILayout.ObjectField(textureAsset, typeof(Texture), false) as Texture; if (EditorGUI.EndChangeCheck()) { UnityEditorUtility.RegisterUndo("UIRawImageInspector-Undo", instance); var assetGuid = textureAsset != null?UnityEditorUtility.GetAssetGUID(textureAsset) : string.Empty; Reflection.SetPrivateField(instance, "assetGuid", assetGuid); if (textureAsset == null) { if (rawImage.texture != null && rawImage.texture.name == UIRawImage.DummyAssetName) { rawImage.texture = null; } } else { Reflection.InvokePrivateMethod(instance, "ApplyDummyAsset"); } } } if (dummyTexture != null) { if (rawImage.texture != dummyTexture) { UnityUtility.SafeDelete(dummyTexture); dummyTexture = null; } } if (rawImage.texture != null && rawImage.texture.name == UIRawImage.DummyAssetName) { dummyTexture = rawImage.texture; } }
private List <SpriteEntry> CreateSprites(List <Texture> textures) { var list = new List <SpriteEntry>(); foreach (var item in textures) { var texture = item as Texture2D; if (texture == null) { continue; } var sprite = new SpriteEntry(); sprite.SetRect(0, 0, texture.width, texture.height); sprite.texture = texture; sprite.name = texture.name; sprite.guid = UnityEditorUtility.GetAssetGUID(texture); sprite.temporaryTexture = false; list.Add(sprite); } return(list); }
protected override void Save() { var saveData = new List <SaveData>(); foreach (var item in pinning) { if (item == null || item.target == null) { continue; } var guid = UnityEditorUtility.GetAssetGUID(item.target); var data = new SaveData() { guid = guid, comment = item.comment, }; saveData.Add(data); } if (saveData.Any()) { ProjectPrefs.Set(PinnedPrefsKey, saveData); } else { if (ProjectPrefs.HasKey(PinnedPrefsKey)) { ProjectPrefs.DeleteKey(PinnedPrefsKey); } } }
void OnGUI() { EditorLayoutTools.SetLabelWidth(120f); EditorGUILayout.Separator(); using (new EditorGUILayout.HorizontalScope()) { if (EditorLayoutTools.PrefixButton("Scene", GUILayout.Width(65f), GUILayout.Height(18f))) { SceneSelector.Prefs.selectedScenePath = sceneAsset != null?AssetDatabase.GetAssetPath(sceneAsset) : null; SceneSelector.Open().Subscribe(OnSelectScene); } if (sceneNameStyle == null) { sceneNameStyle = EditorStyles.textArea; sceneNameStyle.alignment = TextAnchor.MiddleLeft; } using (new EditorGUILayout.VerticalScope()) { GUILayout.Space(3f); EditorGUI.BeginChangeCheck(); sceneAsset = EditorLayoutTools.ObjectField(sceneAsset, false); if (EditorGUI.EndChangeCheck()) { Prefs.targetSceneGuid = UnityEditorUtility.GetAssetGUID(sceneAsset); } } GUILayout.Space(5f); } GUILayout.Space(5f); using (new EditorGUILayout.HorizontalScope()) { GUILayout.Space(5f); // 下記条件時は再生ボタンを非アクティブ:. // ・実行中. // ・ビルド中. // ・遷移先シーンが未選択. var disable = EditorApplication.isPlaying || EditorApplication.isCompiling || sceneAsset == null; using (new DisableScope(disable)) { if (GUILayout.Button("Launch")) { Launch().Subscribe(); } } GUILayout.Space(5f); } }
public SpriteInfo(Texture texture, SpriteAction action) { this.name = texture.name; this.guid = UnityEditorUtility.GetAssetGUID(texture); this.action = action; }
private static void FindSpriteReferenceInternal() { if (Selection.activeObject == null) { return; } var target = Selection.activeObject; var sprite = target as Sprite; if (sprite == null) { return; } var texture = sprite.texture; var textureAssetPath = AssetDatabase.GetAssetPath(texture); var textureMetaFilePath = AssetDatabase.GetAssetPathFromTextMetaFilePath(textureAssetPath); if (string.IsNullOrEmpty(textureMetaFilePath)) { return; } textureMetaFilePath += ".meta"; var textureGuid = UnityEditorUtility.GetAssetGUID(sprite.texture); var spriteFileId = string.Empty; var spriteName = sprite.name; using (var sr = new StreamReader(textureMetaFilePath, Encoding.UTF8, false, 256 * 1024)) { var skip = true; while (!sr.EndOfStream) { var line = sr.ReadLine(); if (string.IsNullOrEmpty(line)) { continue; } var str = line.Replace(" ", string.Empty); if (str.StartsWith("fileIDToRecycleName")) { skip = false; } if (skip) { continue; } var findFormat = string.Format(":{0}", spriteName); if (!str.Contains(findFormat)) { continue; } spriteFileId = str.Replace(findFormat, string.Empty); break; } } var assetPath = Application.dataPath; var scenes = FindAllFiles(assetPath, "*.unity"); var prefabs = FindAllFiles(assetPath, "*.prefab"); var materials = FindAllFiles(assetPath, "*.mat"); var assets = FindAllFiles(assetPath, "*.asset"); var scenesReference = new HashSet <string>(); var prefabsReference = new HashSet <string>(); var materialsReference = new HashSet <string>(); var assetsReference = new HashSet <string>(); Action <int, int> reportProgress = (c, t) => { var title = "Find Sprite References In Project"; var info = string.Format("Find Dependencies ({0}/{1})", c, t); EditorUtility.DisplayProgressBar(title, info, c / (float)t); }; var total = scenes.Length + prefabs.Length + materials.Length + assets.Length; reportProgress(0, total); var progressCounter = new ProgressCounter(); var events = new WaitHandle[] { StartResolveReferencesWorker(scenes, spriteFileId, textureGuid, (metadata) => scenesReference = metadata, progressCounter), StartResolveReferencesWorker(prefabs, spriteFileId, textureGuid, (metadata) => prefabsReference = metadata, progressCounter), StartResolveReferencesWorker(materials, spriteFileId, textureGuid, (metadata) => materialsReference = metadata, progressCounter), StartResolveReferencesWorker(assets, spriteFileId, textureGuid, (metadata) => assetsReference = metadata, progressCounter), }; while (!WaitHandle.WaitAll(events, 100)) { reportProgress(progressCounter.Count, total); } reportProgress(progressCounter.Count, total); var builder = new StringBuilder(); if (scenesReference.Any()) { builder.AppendLine("ScenesReference:"); scenesReference.ForEach(x => builder.AppendLine(x)); Debug.Log(builder.ToString()); builder.Clear(); } if (prefabsReference.Any()) { builder.AppendLine("PrefabsReference:"); prefabsReference.ForEach(x => builder.AppendLine(x)); Debug.Log(builder.ToString()); builder.Clear(); } if (materialsReference.Any()) { builder.AppendLine("MaterialsReference:"); materialsReference.ForEach(x => builder.AppendLine(x)); Debug.Log(builder.ToString()); builder.Clear(); } if (assetsReference.Any()) { builder.AppendLine("AssetsReference:"); assetsReference.ForEach(x => builder.AppendLine(x)); Debug.Log(builder.ToString()); builder.Clear(); } if (scenesReference.IsEmpty() && prefabsReference.IsEmpty() && materialsReference.IsEmpty() && assetsReference.IsEmpty()) { Debug.Log("This asset no reference in project."); } EditorUtility.ClearProgressBar(); }
public override void OnInspectorGUI() { var instance = target as LocalizeAtlasRequest; Initialize(); var update = false; var folderGuids = instance.FolderGuids.ToList(); var removeTarget = new List <string>(); using (new EditorGUILayout.HorizontalScope()) { GUILayout.Space(8f); if (GUILayout.Button(toolbarPlusIcon, GUILayout.Width(30f), GUILayout.Height(16f))) { folderGuids.Add(null); update = true; } } var scrollViewLayoutOption = new List <GUILayoutOption>(); if (5 < folderGuids.Count) { scrollViewLayoutOption.Add(GUILayout.MaxHeight(120f)); } using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition, scrollViewLayoutOption.ToArray())) { for (var i = 0; i < folderGuids.Count; i++) { var folderGuid = folderGuids[i]; UnityEngine.Object folder = null; if (!string.IsNullOrEmpty(folderGuid)) { var assetPath = AssetDatabase.GUIDToAssetPath(folderGuid); folder = AssetDatabase.LoadMainAssetAtPath(assetPath); } using (new EditorGUILayout.HorizontalScope()) { var layoutOption = new GUILayoutOption[] { GUILayout.Height(16f), GUILayout.ExpandWidth(true), }; EditorGUI.BeginChangeCheck(); folder = EditorGUILayout.ObjectField(folder, typeof(UnityEngine.Object), false, layoutOption); if (EditorGUI.EndChangeCheck()) { // フォルダだけ登録可能. if (UnityEditorUtility.IsFolder(folder) || folder == null) { folderGuids[i] = folder == null ? string.Empty : UnityEditorUtility.GetAssetGUID(folder); update = true; } } if (GUILayout.Button(toolbarMinusIcon, EditorStyles.miniButton, GUILayout.Width(25f))) { removeTarget.Add(folderGuid); } } GUILayout.Space(2f); } scrollPosition = scrollView.scrollPosition; } if (removeTarget.Any()) { foreach (var info in removeTarget) { folderGuids.Remove(info); } update = true; } if (update) { Reflection.SetPrivateField(instance, "folderGuids", folderGuids.ToArray()); } }
//----- property ----- //----- method ----- void OnEnable() { instance = target as TextureAssetTunerConfig; lifetimeDisposable = new LifetimeDisposable(); //------ Compress Folder ------ compressFolderView = new FolderRegisterScrollView("Compress Folder", "TextureAssetTunerConfigInspector-CompressFolder"); compressFolderView.RemoveChildrenFolder = true; compressFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveCompressFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); var compressFolderGuids = instance.CompressFolders .Select(x => UnityEditorUtility.GetAssetGUID(x)) .ToArray(); compressFolderView.SetContents(compressFolderGuids); //------ Sprite Folder ------ spriteFolderView = new FolderRegisterScrollView("Sprite Folder", "TextureAssetTunerConfigInspector-SpriteFolder"); spriteFolderView.RemoveChildrenFolder = true; spriteFolderView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolders(x.Select(y => y.asset).ToArray())) .AddTo(lifetimeDisposable.Disposable); var spriteFolderGuids = instance.SpriteFolders .Select(x => UnityEditorUtility.GetAssetGUID(x)) .ToArray(); spriteFolderView.SetContents(spriteFolderGuids); //------ Ignore Compress FolderName ------ ignoreCompressFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreCompressFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreCompressFolders(x)) .AddTo(lifetimeDisposable.Disposable); ignoreCompressFolderNameScrollView.SetContents(instance.IgnoreCompressFolders); //------ Sprite Folder Name ------ spriteFolderNameScrollView = new FolderNameRegisterScrollView(); spriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveSpriteFolderNames(x)) .AddTo(lifetimeDisposable.Disposable); spriteFolderNameScrollView.SetContents(instance.SpriteFolderNames); //------ Ignore Sprite FolderName ------ ignoreSpriteFolderNameScrollView = new FolderNameRegisterScrollView(); ignoreSpriteFolderNameScrollView.OnUpdateContentsAsObservable() .Subscribe(x => SaveIgnoreSpriteFolders(x)) .AddTo(lifetimeDisposable.Disposable); ignoreSpriteFolderNameScrollView.SetContents(instance.IgnoreSpriteFolders); //------ Options ------ changeSettingOnImport = TextureAssetTunerConfig.Prefs.changeSettingOnImport; }
public override void OnInspectorGUI() { Initialize(); InitializeStyle(); var instance = target as LocalizeSpriteAsset; var removeInfos = new List <LocalizeSpriteAsset.FolderInfo>(); var update = false; GUILayout.Space(4f); using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (GUILayout.Button(toolbarPlusIcon, GUILayout.Width(50f), GUILayout.Height(16f))) { var info = new LocalizeSpriteAsset.FolderInfo(); folderInfos.Add(info); update = true; } GUILayout.Space(8f); } var swapTargets = new List <Tuple <int, int> >(); using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition, GUILayout.ExpandWidth(true))) { for (var i = 0; i < folderInfos.Count; i++) { var info = folderInfos[i]; using (new ContentsScope()) { using (new EditorGUILayout.HorizontalScope()) { EditorGUI.BeginChangeCheck(); var index = EditorGUILayout.DelayedIntField("Index", i, inputFieldStyle, GUILayout.Height(16f), GUILayout.ExpandWidth(true)); if (EditorGUI.EndChangeCheck()) { if (0 <= index && index < folderInfos.Count) { swapTargets.Add(Tuple.Create(i, index)); } } GUILayout.FlexibleSpace(); if (GUILayout.Button(toolbarMinusIcon, EditorStyles.miniButton, GUILayout.Width(35f))) { removeInfos.Add(info); } } GUILayout.Space(2f); UnityEngine.Object folder = null; if (!string.IsNullOrEmpty(info.guid)) { var assetPath = AssetDatabase.GUIDToAssetPath(info.guid); folder = AssetDatabase.LoadMainAssetAtPath(assetPath); } var layoutOption = new GUILayoutOption[] { GUILayout.Height(16f), GUILayout.ExpandWidth(true), }; EditorGUI.BeginChangeCheck(); folder = EditorGUILayout.ObjectField("Atlas Folder", folder, typeof(UnityEngine.Object), false, layoutOption); GUILayout.Space(2f); info.description = EditorGUILayout.DelayedTextField("Description", info.description, inputFieldStyle, layoutOption); if (EditorGUI.EndChangeCheck()) { // フォルダだけ登録可能. if (UnityEditorUtility.IsFolder(folder) || folder == null) { info.guid = folder == null ? string.Empty : UnityEditorUtility.GetAssetGUID(folder); } update = true; } } GUILayout.Space(4f); } scrollPosition = scrollView.scrollPosition; } if (swapTargets.Any()) { foreach (var swapTarget in swapTargets) { folderInfos = folderInfos.Swap(swapTarget.Item1, swapTarget.Item2).ToList(); } update = true; } if (removeInfos.Any()) { foreach (var info in removeInfos) { folderInfos.Remove(info); } update = true; } if (update) { var infos = folderInfos .Select(x => { var info = x.DeepCopy(); info.description = info.description.Encrypt(cryptoKey); return(info); }) .ToArray(); Reflection.SetPrivateField(instance, "infos", infos); isChanged = true; } }