コード例 #1
0
ファイル: SpriteData.cs プロジェクト: sateyr/SpriteAuditor
        private bool TryGetSpriteUsageData(GameObject instance, int instanceID, string usagePath,
                                           out SpriteUseData spriteUseData)
        {
            int usagesCount = usages.Count;

            for (int i = 0; i < usagesCount; i++)
            {
                spriteUseData = usages[i];
                string prefabGUID = string.Empty;

                if (PrefabUtility.IsPartOfAnyPrefab(instance))
                {
                    prefabGUID = AssetDatabase.AssetPathToGUID(PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(instance));
                }

                if (spriteUseData.InstanceID == instanceID ||
                    spriteUseData.HierarchyPaths.Contains(usagePath) ||
                    String.Equals(prefabGUID, spriteUseData.NearestPrefabGUID, StringComparison.Ordinal))
                {
                    return(true);
                }
            }

            spriteUseData = null;
            return(false);
        }
コード例 #2
0
ファイル: SpriteData.cs プロジェクト: sateyr/SpriteAuditor
        public void ReportUse(GameObject instance, Vector3?size)
        {
            string        usagePath       = instance.transform.GetPath();
            SpriteUseData spriteUsageData = GetOrCreateSpriteUsageData(instance, usagePath);
            Scene         instanceScene   = instance.scene;

            ReportScene(instanceScene);
            spriteUsageData.ReportPath(usagePath, instanceScene);
            ReportSize(size);
        }
コード例 #3
0
ファイル: SpriteData.cs プロジェクト: sateyr/SpriteAuditor
        private SpriteUseData GetOrCreateSpriteUsageData(GameObject instance, string usagePath)
        {
            int instanceID = instance.GetInstanceID();

            if (TryGetSpriteUsageData(instance, instanceID, usagePath, out SpriteUseData spriteUseData))
            {
                return(spriteUseData);
            }

            spriteUseData = new SpriteUseData(instance, instanceID, usagePath);
            usages.Add(spriteUseData);
            SpriteAuditorUtility.SetResultViewDirty();
            return(spriteUseData);
        }
コード例 #4
0
        protected void DrawSpriteReferencesPath(SpriteData spriteData)
        {
            EditorGUILayout.LabelField("Usages", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;

            for (int i = 0; i < spriteData.Usages.Count; i++)
            {
                SpriteUseData spriteUseData = spriteData.Usages[i];
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(spriteUseData.DisplayFirstPath);

                if (GUILayout.Button("Select", EditorStyles.miniButton))
                {
                    TrySelect(spriteUseData);
                }

                EditorGUILayout.EndHorizontal();
            }

            EditorGUI.indentLevel--;
        }
コード例 #5
0
        private void TrySelect(SpriteUseData spriteUseData)
        {
            if (!string.IsNullOrEmpty(spriteUseData.NearestPrefabGUID))
            {
                if (!Application.isPlaying)
                {
                    GameObject prefabInstance = PrefabUtility.LoadPrefabContents(AssetDatabase.GUIDToAssetPath(spriteUseData.NearestPrefabGUID));
                }
            }
            else
            {
                string[] paths = spriteUseData.FirstPath.Split(new[] { SpriteUseData.PATH_SEPARATOR },
                                                               StringSplitOptions.RemoveEmptyEntries);

                if (paths.Length != 2)
                {
                    return;
                }

                string scenePath = paths[0];
                if (!string.IsNullOrEmpty(scenePath))
                {
                    if (!scenePath.Contains("DontDestroyOnLoad"))
                    {
                        if (!Application.isPlaying)
                        {
                            EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Additive);
                        }
                    }
                }

                GameObject gameObject = GameObject.Find(paths[1]);
                if (gameObject == null)
                {
                    return;
                }

                Selection.SetActiveObjectWithContext(gameObject, null);
            }
        }