コード例 #1
0
    public static IEnumerable <ReferenceViewerClassbase> AllReferencedByComponent(GameObject[] currentObjects, ReferenceIgnoreType ignoreType, string search = null)
    {
        var list = new List <ReferenceViewerClassbase> ();

        foreach (var currentObject in currentObjects)
        {
            var referencedByList = allReferenceInfo
                                   .Where(item => currentObject == ReferenceExplorerUtility.GetGameObject(item.referenceTarget));

            if (string.IsNullOrEmpty(search) == false)
            {
                var dic = ReferenceExplorerUtility.GetTExtCommand(search);

                if (dic.ContainsKey("type"))
                {
                    var typeText = dic ["type"];
                    referencedByList = referencedByList
                                       .Where(item =>
                                              item.referenceName.ToLower().IndexOf(typeText) != -1 ||
                                              item.referenceTarget.GetType().FullName.ToLower().IndexOf(typeText) != -1 ||
                                              item.fromObject.GetType().FullName.ToLower().IndexOf(typeText) != -1 ||
                                              ReferenceExplorerUtility.GetGameObject(item.fromObject).name.ToLower().IndexOf(typeText) != -1);
                }
                if (dic.ContainsKey("obj"))
                {
                    var objName = dic ["obj"];
                    referencedByList = referencedByList
                                       .Where(item =>
                                              ReferenceExplorerUtility.GetGameObject(item.fromObject).name.ToLower().IndexOf(objName) != -1);
                }

                if (dic.ContainsKey("param"))
                {
                    var param = dic ["param"];
                    referencedByList = referencedByList
                                       .Where(item => item.referenceName.IndexOf(param) != -1);
                }
            }

            if (ignoreType == ReferenceIgnoreType.IgnoreSelf)
            {
                referencedByList = referencedByList.Where(item => currentObject != ReferenceExplorerUtility.GetGameObject(item.fromObject))
                                   .Where(item => currentObjects.Contains(ReferenceExplorerUtility.GetGameObject(item.fromObject)) == false);
            }
            else if (ignoreType == ReferenceIgnoreType.IgnoreFamilly)
            {
                referencedByList = referencedByList.Where(item => ReferenceExplorerUtility.IsFamilly(item.fromObject, currentObject) == false)
                                   .Where(item => currentObjects.Contains(ReferenceExplorerUtility.GetGameObject(item.fromObject)) == false);
            }

            var allComponentType = referencedByList
                                   .Select(item => item.fromObject.GetType())
                                   .Distinct().OrderBy(item => item.FullName);

            foreach (var uniqueComponentType in allComponentType)
            {
                var componentItme = new ReferenceViewerClassbase();
                componentItme.type = uniqueComponentType;
                componentItme.referenceInfoList = referencedByList
                                                  .Where(item => item.fromObject.GetType() == uniqueComponentType)
                                                  .OrderBy(item => ReferenceExplorerUtility.GetGameObject(item.fromObject).name)
                                                  .ToList();
                list.Add(componentItme);
            }
        }

        return(list.Where(item => item.referenceInfoList.Count > 0));
    }
コード例 #2
0
    public static void ExportObjectReference(bool isContainFamilly, bool isContainCallbacks)
    {
        try{
            ReferenceExplorerData.RestoreAllData();

            EditorUtility.DisplayProgressBar("Export GameObject Graph", "get all objects", 0);



            var objectNames = ReferenceExplorerData.allReferenceInfo
                              .Where(item =>
                                     ReferenceExplorerUtility.GetGameObject(item.referenceTarget) != null &&
                                     ReferenceExplorerUtility.GetGameObject(item.referenceTarget) != null)
                              .SelectMany(item => new GameObject[] {
                ReferenceExplorerUtility.GetGameObject(item.referenceTarget),
                ReferenceExplorerUtility.GetGameObject(item.fromObject)
            }).Distinct();

            EditorUtility.DisplayProgressBar("Export GameObject Graph", "check reference", 0.2f);


            List <ReferenceInfoObject> referenceInfoList = new List <ReferenceInfoObject>();
            foreach (var referenceInfo in ReferenceExplorerData.allReferenceInfo)
            {
                var fromObject   = ReferenceExplorerUtility.GetGameObject(referenceInfo.fromObject);
                var targetObject = ReferenceExplorerUtility.GetGameObject(referenceInfo.referenceTarget);

                if (targetObject == null || fromObject == null)
                {
                    continue;
                }

                if (isContainFamilly == false && ReferenceExplorerUtility.IsFamilly(fromObject, targetObject))
                {
                    continue;
                }

                if (referenceInfoList.Any(item => ReferenceExplorerUtility.GetGameObject(item.fromObject) == fromObject ||
                                          ReferenceExplorerUtility.GetGameObject(item.targetObject) == targetObject) == true ||
                    fromObject == targetObject)
                {
                    continue;
                }
                referenceInfoList.Add(new ReferenceInfoObject()
                {
                    targetObject = fromObject,
                    fromObject   = targetObject,
                });
            }

            EditorUtility.DisplayProgressBar("Export GameObject Graph", "exporting", 0.7f);

            StringBuilder exportBuilder = new StringBuilder();
            exportBuilder.AppendLine("graph");
            exportBuilder.AppendLine("[");
            foreach (var objName in objectNames)
            {
                if (referenceInfoList.Any(item => item.fromObject == objName || item.targetObject == objName) == false)
                {
                    continue;
                }

                var isPrefab = PrefabUtility.GetPrefabObject(objName) == null;

                exportBuilder.AppendLine("	node");
                exportBuilder.AppendLine("	[");
                exportBuilder.AppendLine("			id	"+ objName.GetHashCode());
                exportBuilder.AppendLine("			label	\""+ objName.name + "\"");
                exportBuilder.AppendLine("		graphics");
                exportBuilder.AppendLine("		[");
                if (isPrefab)
                {
                    exportBuilder.AppendLine("			fill	\"#FFFF99\"");
                }
                exportBuilder.AppendLine("			w	"+ objName.name.Length * 10);
                exportBuilder.AppendLine("		]");
                exportBuilder.AppendLine("	]");
            }

            foreach (var referenceInfo in referenceInfoList)
            {
                exportBuilder.AppendLine("	edge");
                exportBuilder.AppendLine("	[");
                exportBuilder.AppendLine("			target	"+ referenceInfo.fromObject.GetHashCode());
                exportBuilder.AppendLine("			source	"+ referenceInfo.targetObject.GetHashCode());
                exportBuilder.AppendLine("	]");
            }

            exportBuilder.AppendLine("]");


            EditorUtility.DisplayProgressBar("Export GameObject Graph", "done", 0.7f);

            System.IO.File.WriteAllText(System.DateTime.Now.ToFileTime() + ".gml", exportBuilder.ToString());
        }finally{
            EditorUtility.ClearProgressBar();
        }
    }