public void initializeList()
 {//OYM:一个简单的防报错和把关键词tolower的方法
     if (!(generateKeyWordWhiteList?.Count != 0))
     {
         generateKeyWordWhiteList = settings.defaultKeyWord;
         if (generateKeyWordWhiteList == null)
         {
             Debug.Log("The white key is null!Check the RuntimeController or Global Setting!");
             return;
         }
     }
     else
     {
         for (int i = 0; i < generateKeyWordWhiteList.Count; i++)
         {
             generateKeyWordWhiteList[i] = generateKeyWordWhiteList[i].ToLower();
         }
     }
     for (int i = 0; i < generateKeyWordBlackList.Count; i++)
     {
         generateKeyWordBlackList[i] = generateKeyWordBlackList[i].ToLower();
     }
     if (!generateTransform)
     {
         generateTransform = transform;
     }
     if (settings == null)
     {
         settings = Resources.Load("Setting/ADBGlobalSettingFile") as ADBGlobalSetting;
     }
 }
        public static ADBConstraintReadAndPointControll[] GetJointAndPointControllList(Transform transform, List <string> generateKeyWordWhiteList, List <string> generateKeyWordBlackList, List <Transform> blackListOfGenerateTransform, ADBGlobalSetting settings) //OYM:一个巨啰嗦的方法
        {
            List <ADBRuntimePoint> FixedADBRuntimePoint = searchFixedADBRuntimePoint(transform, generateKeyWordWhiteList, generateKeyWordBlackList, blackListOfGenerateTransform, 0);                                                                                 //OYM:获取所有的固定点,,这里的固定时指那些能动的点的父节点,顺便一提,这个方法顺便把所有节点的子节点赋值了

            if (FixedADBRuntimePoint == null)
            {
                return(null);
            }

            //OYM:在这里对收集好的子节点进行分类与识别
            List <ADBConstraintReadAndPointControll> ADBRuntimeJointAndPointControlls = new List <ADBConstraintReadAndPointControll>();//OYM:

            for (int i = 0; i < FixedADBRuntimePoint.Count; i++)
            {
                Transform parentPoint = FixedADBRuntimePoint[i].trans.parent;
                string    keyWord     = FixedADBRuntimePoint[i].keyWord;
                bool      isContain   = false;
                for (int j0 = 0; j0 < ADBRuntimeJointAndPointControlls.Count; j0++)
                {
                    //OYM:如果包含,就把它加到包含它的controll里面去
                    if (ADBRuntimeJointAndPointControlls[j0].rootNode.trans == parentPoint && ADBRuntimeJointAndPointControlls[j0].keyWord == keyWord)
                    {
                        ADBRuntimeJointAndPointControlls[j0].fixedNodeList.Add(FixedADBRuntimePoint[i]);
                        isContain = true;
                    }
                }
                //OYM:不包含就新建立一个controll,然后加进去
                if (!isContain)
                {
                    ADBSetting setting;
                    if (settings == null)
                    {
                        Debug.Log("Setting File is Lost,check the Resources folder");
                        setting = (ADBSetting)ScriptableObject.CreateInstance(typeof(ADBSetting));
                    }
                    else
                    {
                        setting = settings.GetSetting(keyWord);
                    }

                    ADBRuntimeJointAndPointControlls.Add(new ADBConstraintReadAndPointControll(parentPoint, keyWord, setting));
                    ADBRuntimeJointAndPointControlls[ADBRuntimeJointAndPointControlls.Count - 1].fixedNodeList.Add(FixedADBRuntimePoint[i]);//OYM:给
                }
            }
            //OYM:顺便把所有的fixednode添加给rootnode的childNode
            for (int i = 0; i < ADBRuntimeJointAndPointControlls.Count; i++)
            {
                ADBRuntimeJointAndPointControlls[i].rootNode.childNode = ADBRuntimeJointAndPointControlls[i].fixedNodeList;
            }
            return(ADBRuntimeJointAndPointControlls.ToArray());
        }