예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
 public SpriteInfo(Texture texture, SpriteAction action)
 {
     this.name   = texture.name;
     this.guid   = UnityEditorUtility.GetAssetGUID(texture);
     this.action = action;
 }
예제 #6
0
        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();
        }
예제 #7
0
        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());
            }
        }
예제 #8
0
        //----- 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;
        }
예제 #9
0
        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;
            }
        }