引用分析

作者: 2b75747cf703 | 来源:发表于2016-06-02 12:35 被阅读559次

http://answers.unity3d.com/questions/321615/code-to-mimic-find-references-in-scene.html
TransformExtension http://www.jianshu.com/p/7eaf986876b6

Unity编辑器非常强大,开发过程中,经常拖拉各种组件引用。
最终可能引用十分混乱,那么这时候就需要用到引用分析,不然场景中一个个自己去找蛋都要碎了。

Paste_Image.png

比如我想查找Demo这个组件被那些对象引用。。

Paste_Image.png

点击Log,可以看到相应的资源。

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using Babybus.Framework.ExtensionMethods;

namespace Babybus.Framework.Extension
{
    public class FindReferences
    {
        [MenuItem("CONTEXT/Component/Find references to this")]
        private static void FindReferencesToComponent(MenuCommand command)
        {
            FindReferencesTo(command.context);
        }

        [MenuItem("Assets/Find references to this")]
        private static void FindReferencesToAsset()
        {
            foreach (var assetObject in Selection.objects)
            {
                FindReferencesTo(assetObject);
            }
        }

        private static void FindReferencesTo(Object to)
        {
            if (to == null)
                return;

            var referencedBy = new List<Object>();
            var allObjects = Object.FindObjectsOfType<GameObject>();

            foreach (var go in allObjects)
            {
                if (PrefabUtility.GetPrefabType(go) == PrefabType.PrefabInstance)
                {
                    if (PrefabUtility.GetPrefabParent(go) == to)
                    {
                        Debug.Log(string.Format("{0} referenced by {1}, {2}", to, go.transform.GetPath(), go.GetType()), go);
                        referencedBy.Add(go);
                    }

                    continue;
                }

                var components = go.GetComponents<Component>();
                foreach (var component in components)
                {
                    var iterator = new SerializedObject(component).GetIterator();

                    while (iterator.NextVisible(true))
                    {
                        if (iterator.propertyType == SerializedPropertyType.ObjectReference)
                        {
                            if (iterator.objectReferenceValue == to)
                            {
                                Debug.Log(string.Format("{0} referenced by {1}, {2}", to, component.transform.GetPath(), component.GetType()), component);
                                referencedBy.Add(component);
                            }
                        }
                    }
                }
            }

            if (referencedBy.Count == 0)
                Debug.Log(to + " no references in scene");
        }
    }
}

相关文章

  • 引用分析

    http://answers.unity3d.com/questions/321615/code-to-mimic...

  • php基础知识面试点

    引用变量考察点 回顾真题什么是引用变量?在php中,用什么符号定义引用变量? 考点分析分析:考官考点PHP引用变量...

  • IOS循环引用、内存泄漏、野指针

    一、循环引用和内存泄漏 1、block循环引用 分析:因为WGBlockTestViewController强引用...

  • 1、php引用变量

    1、PHP引用变量: 引用: Zval: 引用:recommend 画图分析法 关于引用的unset: 结果还是1...

  • 一个不容易发现的循环引用问题

    产生循环引用的原因分析:field强引用 inputView, inputView的block强引用field,当...

  • Android 性能优化-Java引用类型

    Java引用类型分为强引用、软引用、弱引用、虚引用,本文对四种引用类型进行分析 强引用 强引用:日常开发中最常见的...

  • 第五天___①

    引用传递进阶分析 引用传递是Java的核心,如果我们不懂引用传递,基本上所有的代码都无法进行正常的分析。范例一: ...

  • matplotlib第三方库

    §1 引用 三种引用方式,具体引用哪个模块内容可以具体分析。import matplotlibfrom matp...

  • java引用疑问

    java引用疑问 java 引用:深入分析Object.finalize方法的实现原理 - 简书Java软引用究竟...

  • iOS __weak、__block使用

    总之这一切其实就是为了防止循环引用,下面结合网络上各位大牛的分析精华分析分析 block对于其变量都会形成强引用(...

网友评论

    本文标题:引用分析

    本文链接:https://www.haomeiwen.com/subject/drhkdttx.html