/// <summary>
            /// Apply adjustments to breast dynamic bones
            /// </summary>
            private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }

                //Expand the collision radius for the breast dynamic bones
                foreach (var pat in dynamicBone.Patterns)
                {
#if KK
                    pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastCollisionRadiusMultiplier : 0;
                    pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.06f * BreastCollisionRadiusMultiplier : 0;
#elif AI
                    pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastCollisionRadiusMultiplier : 0;
                    pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.6f * BreastCollisionRadiusMultiplier : 0;
#else
                    throw new System.NotImplementedException();
#endif
                }

                dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.InitLocalPosition();
                if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null))
                {
                    dynamicBone.setPtn(0, true);
                }
                dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null);
            }
            /// <summary>
            /// Apply adjustments to breast dynamic bones
            /// </summary>
            private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }

                //Expand the collision radius for the breast dynamic bones
                for (var index = 0; index < dynamicBone.Patterns.Count; index++)
                {
                    var pat = dynamicBone.Patterns[index];
#if KK || KKS
                    pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.10f * BreastSize : 0;
                    pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastSize : 0;
#elif AI || HS2
                    pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 1.0f * BreastSize : 0;
                    pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastSize : 0;
#endif
                }

                dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.InitLocalPosition();
                if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null))
                {
                    dynamicBone.setPtn(0, true);
                }
                dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null);
            }
        public static bool ApplyParamBust(ParamBustCustom source, DynamicBone_Ver02 target)
        {
            Regex regex = new Regex("_R$");

            //For Params
            //Parameter Patterns[0]="通常"
            target.setGravity(0, new UnityEngine.Vector3(0, source.gravity, 0));

            for (int i = 0; i < target.Patterns[0].Params.Count; i++)
            {
                string boneName = regex.Replace(target.Patterns[0].Params[i].Name, "_L");
                if (source.paramBones.ContainsKey(boneName))
                {
                    ParamBone parameterSet = source.paramBones[boneName];
                    if (parameterSet != null)
                    {
                        parameterSet.CopyParameterTo(target.Patterns[0].Params[i]);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            //For ParticlePtn
            //ParticlePtn Patterns[0]="通常"
            CopyParamsToParticlePtn(target);

            //For Particle. Must set at last.
            target.setPtn(0, true);

            return(true);
        }
        public static bool ApplyParamBust(ParamBustOrg source, DynamicBone_Ver02 target)
        {
            //For Params
            //Parameter Patterns[0]="通常"
            //target.Gravity.Set(source.gravity.x,source.gravity.y,source.gravity.z);
            target.setGravity(0, source.gravity);
            for (int i = 0; i < target.Patterns[0].Params.Count; i++)
            {
                source.parameters[i].CopyParameterTo(target.Patterns[0].Params[i]);
            }

            //For ParticlePtn
            //ParticlePtn Patterns[0]="通常"
            CopyParamsToParticlePtn(target);

            //For Particle. Must set at last.
            target.setPtn(0, true);

            return(true);
        }