예제 #1
0
        //----- params -----

        //----- field -----

        //----- property -----

        //----- method -----

        public static string[] OnWillSaveAssets(string[] paths)
        {
            if (paths.IsEmpty())
            {
                return(paths);
            }

            GameObject[] hierarchyGameObjects = null;

            foreach (string path in paths)
            {
                var atlasTexture = AssetDatabase.LoadMainAssetAtPath(path) as AtlasTexture;

                if (atlasTexture != null)
                {
                    // 必要になった時に一回だけ取得して使いまわす.
                    if (hierarchyGameObjects == null)
                    {
                        hierarchyGameObjects = UnityEditorUtility.FindAllObjectsInHierarchy();
                    }

                    // AtlasTextureImage.
                    UpdateAtlasTextureImage(hierarchyGameObjects, atlasTexture);
                }
            }

            return(paths);
        }
예제 #2
0
        public static void Reload()
        {
            if (!GameText.Exists)
            {
                GameText.CreateInstance();
            }

            var gameTextInfo = GameTextLanguage.GameTextInfos.ElementAtOrDefault(GameTextLanguage.Prefs.selection);

            if (gameTextInfo != null)
            {
                GameText.Instance.LoadFromResources(gameTextInfo.AssetPath);
            }

            var gameObjects = UnityEditorUtility.FindAllObjectsInHierarchy();

            foreach (var gameObject in gameObjects)
            {
                var setter = gameObject.GetComponent <GameTextSetter>();

                if (setter != null)
                {
                    setter.ImportText();
                }
            }

            IsLoaded = true;
        }
예제 #3
0
        private static void HierarchyChanged()
        {
            // 実行中は負荷が高いので実行しない.
            if (Application.isPlaying)
            {
                return;
            }

            if (onHierarchyChangedAsObservable != null)
            {
                onHierarchyChangedAsObservable.OnNext(Unit.Default);
            }

            var createObserver = onCreateAsObservable != null && onCreateAsObservable.HasObservers;
            var deleteObserver = onDeleteAsObservable != null && onDeleteAsObservable.HasObservers;

            if (createObserver || deleteObserver)
            {
                var nowScene = SceneManager.GetActiveScene();

                if (hierarchyObjects != null)
                {
                    hierarchyObjects = hierarchyObjects.Where(x => !UnityUtility.IsNull(x)).ToArray();
                }

                if (hierarchyObjects == null || hierarchyObjects.IsEmpty() || currentScene != nowScene)
                {
                    CollectHierarchyObjects();
                }
                else
                {
                    // Hierarchy上のGameObjectを検索して取得.
                    var objects = UnityEditorUtility.FindAllObjectsInHierarchy();

                    // キャッシュ済みGameObjectとの差分で新規作成されたGameObjectを発見.
                    var newObjects = objects.Where(x => hierarchyObjects.All(y => x != y)).ToArray();

                    // 新規作成通知.
                    if (0 < newObjects.Length)
                    {
                        if (onCreateAsObservable != null)
                        {
                            onCreateAsObservable.OnNext(newObjects.ToArray());
                        }
                    }

                    if (objects.Length < hierarchyObjects.Length)
                    {
                        if (onDeleteAsObservable != null)
                        {
                            onDeleteAsObservable.OnNext(Unit.Default);
                        }
                    }

                    hierarchyObjects = objects;
                }
            }
        }
예제 #4
0
        private static void HierarchyChanged()
        {
            // 実行中は負荷が高いので実行しない.
            if (Application.isPlaying)
            {
                return;
            }

            if (onHierarchyChangedAsObservable != null)
            {
                onHierarchyChangedAsObservable.OnNext(Unit.Default);
            }

            var createObserver = onCreateAsObservable != null && onCreateAsObservable.HasObservers;
            var deleteObserver = onDeleteAsObservable != null && onDeleteAsObservable.HasObservers;

            if (createObserver || deleteObserver)
            {
                var nowScene = SceneManager.GetActiveScene();

                // Hierarchy上のGameObjectを検索して取得.
                hierarchyObjects = UnityEditorUtility.FindAllObjectsInHierarchy();

                // シーンが変わっていた場合Hierarchy上のGameObjectをキャッシュ.
                if (currentScene != nowScene)
                {
                    markedObjects = hierarchyObjects.Select(x => x.GetInstanceID()).ToArray();
                    currentScene  = nowScene;
                }

                // キャッシュ済みGameObjectとの差分で新規作成されたGameObjectを発見.
                var newObjects = hierarchyObjects.Where(x => !markedObjects.Any(y => y == x.GetInstanceID())).ToArray();

                // 新規作成通知.
                if (0 < newObjects.Length)
                {
                    if (onCreateAsObservable != null)
                    {
                        onCreateAsObservable.OnNext(newObjects.ToArray());
                    }
                }

                if (hierarchyObjects.Length < markedObjects.Length)
                {
                    if (onDeleteAsObservable != null)
                    {
                        onDeleteAsObservable.OnNext(Unit.Default);
                    }
                }

                markedObjects = hierarchyObjects.Select(x => x.GetInstanceID()).ToArray();
            }
        }
예제 #5
0
        private static void CollectHierarchyObjects()
        {
            // 実行中は負荷が高いので実行しない.
            if (Application.isPlaying)
            {
                return;
            }

            currentScene = SceneManager.GetSceneAt(0);

            hierarchyObjects = UnityEditorUtility.FindAllObjectsInHierarchy();
        }
예제 #6
0
        public static void Reload()
        {
            if (EditorApplication.isPlayingOrWillChangePlaymode)
            {
                return;
            }

            var textData = TextData.Instance;

            if (textData == null)
            {
                return;
            }

            var config = TextDataConfig.Instance;

            if (config == null)
            {
                return;
            }

            // 内包テキスト読み込み.

            var embeddedAsset = LoadTextDataAsset(ContentType.Embedded);

            textData.LoadEmbedded(embeddedAsset);

            // 配信テキスト読み込み.

            if (config != null && config.Distribution.Enable)
            {
                var distributionAsset = LoadTextDataAsset(ContentType.Distribution);

                textData.AddContents(distributionAsset);
            }

            // 適用.

            var gameObjects = UnityEditorUtility.FindAllObjectsInHierarchy();

            foreach (var gameObject in gameObjects)
            {
                var setter = gameObject.GetComponent <TextSetter>();

                if (setter != null)
                {
                    Reflection.InvokePrivateMethod(setter, "ImportText");
                }
            }

            IsLoaded = true;
        }
예제 #7
0
        private static void CollectHierarchyObjects()
        {
            // 実行中は負荷が高いので実行しない.
            if (Application.isPlaying)
            {
                return;
            }

            var nowScene = SceneManager.GetSceneAt(0);

            hierarchyObjects = UnityEditorUtility.FindAllObjectsInHierarchy();
            markedObjects    = hierarchyObjects.Select(x => x.GetInstanceID()).ToArray();
            currentScene     = nowScene;
        }
예제 #8
0
        protected override void Load()
        {
            pinning = new List <PinnedItem>();

            var prefsKey = GetPinnedPrefsKey();

            var saveData = ProjectPrefs.Get <List <SaveData> >(prefsKey, null);

            if (saveData == null)
            {
                return;
            }

            if (saveData.Any())
            {
                // Hierarchy上のGameObjectを検索して取得.
                var hierarchyObjects = UnityEditorUtility.FindAllObjectsInHierarchy();

                foreach (var data in saveData)
                {
                    if (data.localIdentifierInFile == -1)
                    {
                        continue;
                    }

                    var targetObject = hierarchyObjects.FirstOrDefault(y => UnityEditorUtility.GetLocalIdentifierInFile(y) == data.localIdentifierInFile) as Object;

                    if (targetObject == null)
                    {
                        continue;
                    }

                    var item = new PinnedItem()
                    {
                        target  = targetObject,
                        comment = data.comment,
                    };

                    pinning.Add(item);
                }
            }
        }
예제 #9
0
        protected override void Load()
        {
            currentScene = SceneManager.GetActiveScene();

            var pinned = ProjectPrefs.GetString(PinnedPrefsKey);

            if (string.IsNullOrEmpty(pinned))
            {
                return;
            }

            // Hierarchy上のGameObjectを検索して取得.
            var hierarchyObjects = UnityEditorUtility.FindAllObjectsInHierarchy();

            pinnedObject = pinned
                           .Split(',')
                           .Select(x => hierarchyObjects.FirstOrDefault(y => LocalIdentifierInFile.Get(y).ToString() == x) as Object)
                           .Where(x => x != null)
                           .ToList();

            UpdatePinnedObjectIds();
        }