• unity 编辑器 对比两次节点信息 查看新增节点和消失节点。


    目的 在一个纯净的游戏环境下 , 查看释放技能后, 是否有节点一直增长。 判断两层子节点

    using Flux;
    using Sirenix.OdinInspector;
    using Sirenix.OdinInspector.Editor;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using UnityEditor;
    using UnityEngine;
    
    #if UNITY_EDITOR && !BOSS_EDITOR
    namespace FluxEditor
    {
        /// <summary>
        /// 目的:制作技能后,自我监测节点的增加情况,确保没有节点一直增长。
        /// 进GameInfo 1 1 30 然后设置BossAction为一个比较纯净的Move
        ///释放技能后,查看技能结束后运行节点增长信息
        /// </summary>
        public class FCheckNodeChildCount : OdinEditorWindow
        {
            public static FCheckNodeChildCount _instance = null;
    
            [MenuItem("Tools/CheckNodeChildCount")]
            public static void Open()
            {
                System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");
                var gameWindow = EditorWindow.GetWindow(T);
    
                _instance = GetWindow<FCheckNodeChildCount>();
                _instance.Show();
                _instance.titleContent = new GUIContent("FCheckNodeChildCount");
                _instance.position = new Rect(gameWindow.position.x + 50, gameWindow.position.y - 50, 600, 400);
    
                _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
    
                if (_instance.parentObj == null)
                {
                    EditorUtility.DisplayDialog("", "1当前没有指定总节点ControllerObject(Clone) ?", "ok");
                    return;
                }
                _instance.parentNode = _instance.parentObj.transform;
            }
            [PropertyOrder(0)]
            private GameObject parentObj;
            [SceneObjectsOnly]
            public Transform parentNode;
            [Button("$ButtonName"), PropertyOrder(1)]
            public void CompareNodeInfo()
            {
                newTransList.Clear();
                lostTransList.Clear();
                addStr.Clear();
                lostStr.Clear();
                if (parentNode == null)
                {
                    _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
    
                    if (_instance.parentObj != null)
                    {
                        _instance.parentNode = _instance.parentObj.transform;
                    }
                    EditorUtility.DisplayDialog("", "2当前没有指定总节点?", "ok");
                    return;
                }
                //只获取二级子节点就可以
                int firstChildCount = parentNode.childCount;
                if (isFirstClick)
                {
                    for (int i = 0; i < firstChildCount; ++i)
                    {
                        var firstChid = parentNode.GetChild(i);
                        firstTransList.Add(new TransHadInfo(firstChid, false));
                        int secondCount = firstChid.childCount;
                        for (int j = 0; j < secondCount; ++j)
                        {
                            var secondChid = firstChid.GetChild(j);
                            secondTransList.Add(new TransHadInfo(secondChid, false));
                        }
                    }
                    isFirstClick = false;
                }
                else
                {
                    //重新读取所有节点,然后获取新节点:
                    for (int i = 0; i < firstChildCount; ++i)
                    {
                        var firstChid = parentNode.GetChild(i);
                        int findIndex = firstTransList.FindIndex(o => o.trans == firstChid);
                        if (findIndex != -1)
                        {
                            firstTransList[findIndex].isHad = true;
                        }
                        else
                        {
                            newTransList.Add(firstChid);
                            firstTransList.Add(new TransHadInfo(firstChid, true));
                        }
                        //第二层
                        int secondCount = firstChid.childCount;
                        for (int j = 0; j < secondCount; ++j)
                        {
                            var secondChid = firstChid.GetChild(j);
                            int secondChidIndex = secondTransList.FindIndex(o => o.trans == secondChid);
                            if (secondChidIndex != -1)
                            {
                                secondTransList[secondChidIndex].isHad = true;
                            }
                            else
                            {
                                newTransList.Add(secondChid);
                                secondTransList.Add(new TransHadInfo(secondChid, true));
                            }
                        }
                    }
    
                    //获取失去的节点:
                    int curCount = firstTransList.Count;
                    for (int i = curCount - 1; i >= 0; --i)
                    {
                        if (firstTransList[i].isHad)
                        {
                            firstTransList[i].isHad = false;
                        }
                        else
                        {
                            firstTransList.RemoveAt(i);
                            lostTransList.Add(firstTransList[i]);
                        }
                    }
    
                    curCount = secondTransList.Count;
                    for (int i = curCount - 1; i >= 0; --i)
                    {
                        if (secondTransList[i].isHad)
                        {
                            secondTransList[i].isHad = false;
                        }
                        else
                        {
                            lostTransList.Add(secondTransList[i]);
                        }
                    }
                }
    
                if(newTransList.Count == 0 && lostTransList.Count == 0)
                {
                    EditorUtility.DisplayDialog("","没有更改","ok");
                }
    
                //得出结论:
                if (newTransList.Count > 0)
                {
                    addStr.Append("新增个数:" + newTransList.Count + " 
    ");
                }
                foreach (var item in newTransList)
                {
                    addStr.Append("Name:" + item.name + " 父节点:" + item.parent.name + " 
    ");
                }
                if (lostTransList.Count > 0)
                {
                    lostStr.Append("减少总个数:" + lostTransList.Count + " 
    ");
                }
                foreach (var item in lostTransList)
                {
                    lostStr.Append("Name:" + item.curName + " 父节点:" + item.parentName + " 
    ");
                }
                addInfos = addStr.ToString();
                lostInfos = lostStr.ToString();
            }
            [LabelText("新增:"), ShowIf("IsShowAddInfo")]
            [PropertyOrder(2), TextArea(10, 100)]
            public string addInfos = "";
            [PropertyOrder(3), TextArea(10, 100)]
            [LabelText("减少:"), ShowIf("IsShowLostInfo")]
            public string lostInfos = "";
            private StringBuilder addStr = new StringBuilder();
            private StringBuilder lostStr = new StringBuilder();
            [Button("清理并重新开始")]
            public void ClearInfo()
            {
                isFirstClick = true;
                firstTransList.Clear();
                secondTransList.Clear();
                addInfos = "";
                lostInfos = "";
            }
    
            private string ButtonName
            {
                get
                {
                    if (isFirstClick)
                    {
                        return "第一次获取当前信息";
                    }
                    else
                    {
                        return "和之前节点对比";
                    }
                }
            }
    
            private List<TransHadInfo> firstTransList = new List<TransHadInfo>(50);
            private List<TransHadInfo> secondTransList = new List<TransHadInfo>(500);
            private List<Transform> newTransList = new List<Transform>();
            private List<TransHadInfo> lostTransList = new List<TransHadInfo>();
            private bool isFirstClick = true;
    
            private bool IsShowAddInfo()
            {
                return newTransList.Count > 0;
            }
    
            private bool IsShowLostInfo()
            {
                return lostTransList.Count > 0;
            }
    
            private float timeCount = 1;
            protected override void OnGUI()
            {
                base.OnGUI();
    
                if (parentNode == null)
                {
                    timeCount -= Time.deltaTime;
                    if (timeCount < 0)
                    {
                        _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
    
                        if (_instance.parentObj != null)
                        {
                            _instance.parentNode = _instance.parentObj.transform;
                        }
                    }
                    timeCount = 1;
                }
            }
    
            private class TransHadInfo
            {
                public TransHadInfo(Transform t, bool isH)
                {
                    trans = t;
                    isHad = isH;
                    curName = trans.name;
                    parentName = trans.parent.name;
                }
    
                public string curName;
                public string parentName;
                public Transform trans;
                public bool isHad = false;
            }
        }
    }
    #endif
     

    using Flux;using Sirenix.OdinInspector;using Sirenix.OdinInspector.Editor;using System.Collections;using System.Collections.Generic;using System.Text;using UnityEditor;using UnityEngine;
    #if UNITY_EDITOR && !BOSS_EDITORnamespace FluxEditor{    /// <summary>    /// 目的:制作技能后,自我监测节点的增加情况,确保没有节点一直增长。    /// 进GameInfo 1 1 30 然后设置BossAction为一个比较纯净的Move    ///释放技能后,查看技能结束后运行节点增长信息    /// </summary>    public class FCheckNodeChildCount : OdinEditorWindow    {        public static FCheckNodeChildCount _instance = null;
            [MenuItem("Tools/CheckNodeChildCount")]        public static void Open()        {            System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");            var gameWindow = EditorWindow.GetWindow(T);
                _instance = GetWindow<FCheckNodeChildCount>();            _instance.Show();            _instance.titleContent = new GUIContent("FCheckNodeChildCount");            _instance.position = new Rect(gameWindow.position.x + 50, gameWindow.position.y - 50, 600, 400);
                _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
                if (_instance.parentObj == null)            {                EditorUtility.DisplayDialog("", "1当前没有指定总节点ControllerObject(Clone) ?", "ok");                return;            }            _instance.parentNode = _instance.parentObj.transform;        }        [PropertyOrder(0)]        private GameObject parentObj;        [SceneObjectsOnly]        public Transform parentNode;        [Button("$ButtonName"), PropertyOrder(1)]        public void CompareNodeInfo()        {            newTransList.Clear();            lostTransList.Clear();            addStr.Clear();            lostStr.Clear();            if (parentNode == null)            {                _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
                    if (_instance.parentObj != null)                {                    _instance.parentNode = _instance.parentObj.transform;                }                EditorUtility.DisplayDialog("", "2当前没有指定总节点?", "ok");                return;            }            //只获取二级子节点就可以            int firstChildCount = parentNode.childCount;            if (isFirstClick)            {                for (int i = 0; i < firstChildCount; ++i)                {                    var firstChid = parentNode.GetChild(i);                    firstTransList.Add(new TransHadInfo(firstChid, false));                    int secondCount = firstChid.childCount;                    for (int j = 0; j < secondCount; ++j)                    {                        var secondChid = firstChid.GetChild(j);                        secondTransList.Add(new TransHadInfo(secondChid, false));                    }                }                isFirstClick = false;            }            else            {                //重新读取所有节点,然后获取新节点:                for (int i = 0; i < firstChildCount; ++i)                {                    var firstChid = parentNode.GetChild(i);                    int findIndex = firstTransList.FindIndex(o => o.trans == firstChid);                    if (findIndex != -1)                    {                        firstTransList[findIndex].isHad = true;                    }                    else                    {                        newTransList.Add(firstChid);                        firstTransList.Add(new TransHadInfo(firstChid, true));                    }                    //第二层                    int secondCount = firstChid.childCount;                    for (int j = 0; j < secondCount; ++j)                    {                        var secondChid = firstChid.GetChild(j);                        int secondChidIndex = secondTransList.FindIndex(o => o.trans == secondChid);                        if (secondChidIndex != -1)                        {                            secondTransList[secondChidIndex].isHad = true;                        }                        else                        {                            newTransList.Add(secondChid);                            secondTransList.Add(new TransHadInfo(secondChid, true));                        }                    }                }
                    //获取失去的节点:                int curCount = firstTransList.Count;                for (int i = curCount - 1; i >= 0; --i)                {                    if (firstTransList[i].isHad)                    {                        firstTransList[i].isHad = false;                    }                    else                    {                        firstTransList.RemoveAt(i);                        lostTransList.Add(firstTransList[i]);                    }                }
                    curCount = secondTransList.Count;                for (int i = curCount - 1; i >= 0; --i)                {                    if (secondTransList[i].isHad)                    {                        secondTransList[i].isHad = false;                    }                    else                    {                        lostTransList.Add(secondTransList[i]);                    }                }            }
                if(newTransList.Count == 0 && lostTransList.Count == 0)            {                EditorUtility.DisplayDialog("","没有更改","ok");            }
                //得出结论:            if (newTransList.Count > 0)            {                addStr.Append("新增个数:" + newTransList.Count + " ");            }            foreach (var item in newTransList)            {                addStr.Append("Name:" + item.name + " 父节点:" + item.parent.name + " ");            }            if (lostTransList.Count > 0)            {                lostStr.Append("减少总个数:" + lostTransList.Count + " ");            }            foreach (var item in lostTransList)            {                lostStr.Append("Name:" + item.curName + " 父节点:" + item.parentName + " ");            }            addInfos = addStr.ToString();            lostInfos = lostStr.ToString();        }        [LabelText("新增:"), ShowIf("IsShowAddInfo")]        [PropertyOrder(2), TextArea(10, 100)]        public string addInfos = "";        [PropertyOrder(3), TextArea(10, 100)]        [LabelText("减少:"), ShowIf("IsShowLostInfo")]        public string lostInfos = "";        private StringBuilder addStr = new StringBuilder();        private StringBuilder lostStr = new StringBuilder();        [Button("清理并重新开始")]        public void ClearInfo()        {            isFirstClick = true;            firstTransList.Clear();            secondTransList.Clear();            addInfos = "";            lostInfos = "";        }
            private string ButtonName        {            get            {                if (isFirstClick)                {                    return "第一次获取当前信息";                }                else                {                    return "和之前节点对比";                }            }        }
            private List<TransHadInfo> firstTransList = new List<TransHadInfo>(50);        private List<TransHadInfo> secondTransList = new List<TransHadInfo>(500);        private List<Transform> newTransList = new List<Transform>();        private List<TransHadInfo> lostTransList = new List<TransHadInfo>();        private bool isFirstClick = true;
            private bool IsShowAddInfo()        {            return newTransList.Count > 0;        }
            private bool IsShowLostInfo()        {            return lostTransList.Count > 0;        }
            private float timeCount = 1;        protected override void OnGUI()        {            base.OnGUI();
                if (parentNode == null)            {                timeCount -= Time.deltaTime;                if (timeCount < 0)                {                    _instance.parentObj = GameObject.Find("ControllerObject(Clone)");
                        if (_instance.parentObj != null)                    {                        _instance.parentNode = _instance.parentObj.transform;                    }                }                timeCount = 1;            }        }
            private class TransHadInfo        {            public TransHadInfo(Transform t, bool isH)            {                trans = t;                isHad = isH;                curName = trans.name;                parentName = trans.parent.name;            }
                public string curName;            public string parentName;            public Transform trans;            public bool isHad = false;        }    }}#endif

    改变自己
  • 相关阅读:
    git merge
    google platform
    http tutorial
    DS,AA tree
    Java,Hashtable
    java,Object
    Pumping lemma for regular languages
    Pumping lemma
    Context-free grammar
    Formal language
  • 原文地址:https://www.cnblogs.com/sun-shadow/p/15174713.html
Copyright © 2020-2023  润新知