private void IKInit4OldPoint(Maid slave)
        {
            var fik = slave.body0.IKCtrl.GetNonPublicField <RootMotion.FinalIK.FullBodyBipedIK>("m_FullbodyIK");

            RootMotion.FinalIK.FullBodyBipedIK FullbodyIK = fik;
            var solver = FullbodyIK.solver;

            string[] tgtlist = new string[] { "IKTarget", "BendBone", "ChainRootBone" };

            solver.spineStiffness           = 1f; //背骨の硬さ
            solver.pullBodyVertical         = 0f; //ボディエフェクター位置補正
            solver.pullBodyHorizontal       = 0f;
            solver.spineMapping.twistWeight = 0f;

            foreach (var e in solver.effectors)
            {
                e.PinToBone(1f, 1f);

                var tgtname = e.target.gameObject.name;

                if (tgtlist.Contains(tgtname))
                {
                    // COM3D2標準ターゲット
                    e.target.transform.position = e.bone.position;
                    e.target.transform.rotation = e.bone.rotation;
                }
            }

            foreach (var m in solver.limbMappings)
            {
                m.weight = 0f;
                m.maintainRotationWeight = 1f;
            }
        }
        private void IKInitTest(Maid slave, string handName)
        {
            var fik = slave.body0.IKCtrl.GetNonPublicField <RootMotion.FinalIK.FullBodyBipedIK>("m_FullbodyIK");

            RootMotion.FinalIK.FullBodyBipedIK FullbodyIK = fik;

            var solver = FullbodyIK.solver;

            if (handName.Contains("右"))
            {
                //solver.rightLegMapping.weight = 0f;
                //solver.spineMapping.twistWeight = 0f;

                //m_FullbodyIK.references.root = slave.gameObject.transform;
                //solver.SetToReferences(FullbodyIK.references, null);
                solver.spineStiffness     = 1f;
                solver.pullBodyVertical   = 0f;
                solver.pullBodyHorizontal = 0f;

                if (Input.GetKey(KeyCode.LeftAlt))
                {
                    solver.spineStiffness   = 0f;
                    solver.pullBodyVertical = 1f;
                }
                foreach (var e in solver.effectors)
                {
                    if (Input.GetKey(KeyCode.RightAlt))
                    {
                        e.PinToBone(0.25f, 1f);
                    }
                    else if (Input.GetKey(KeyCode.RightShift))
                    {
                        e.PinToBone(0.5f, 0f);
                    }
                    else if (Input.GetKey(KeyCode.RightControl))
                    {
                        e.PinToBone(0f, 1f);
                    }
                    else
                    {
                        e.PinToBone(1f, 1f);
                    }
                }
                solver.rightLegMapping.maintainRotationWeight = 1f;
                solver.leftLegMapping.maintainRotationWeight  = 1f;

                if (Input.GetKey(KeyCode.Space))
                {
                    solver.rightLegMapping.weight = 1f;
                }
                else if (Input.GetKey(KeyCode.Keypad0))
                {
                    solver.rightLegMapping.weight = 0f;
                }
                else
                {
                    solver.rightLegMapping.weight = 0.5f;
                }

                /*Sync(solver.bodyEffector);
                 * Sync(solver.rightFootEffector);
                 * Sync(solver.rightThighEffector);
                 * Sync(solver.rightShoulderEffector);
                 * WeightZero(solver.rightFootEffector);
                 * WeightZero(solver.rightThighEffector);
                 * WeightZero(solver.rightShoulderEffector);*/
            }
            else
            {
                solver.leftLegMapping.maintainRotationWeight = 1f;
                if (Input.GetKey(KeyCode.Space))
                {
                    solver.leftLegMapping.weight = 1f;
                }
                else if (Input.GetKey(KeyCode.Keypad0))
                {
                    solver.leftLegMapping.weight = 0f;
                }
                else
                {
                    solver.leftLegMapping.weight = 0.5f;
                }

                /*Sync(solver.leftFootEffector);
                 * Sync(solver.leftThighEffector);
                 * Sync(solver.leftShoulderEffector);
                 * WeightZero(solver.leftFootEffector);
                 * WeightZero(solver.leftThighEffector);
                 * WeightZero(solver.leftShoulderEffector);*/
            }
        }
        private void IKInit2(Maid slave)
        {
            var fik = slave.body0.IKCtrl.GetNonPublicField <RootMotion.FinalIK.FullBodyBipedIK>("m_FullbodyIK");

            RootMotion.FinalIK.FullBodyBipedIK FullbodyIK = fik;
            var solver = FullbodyIK.solver;

            string[] tgtlist  = new string[] { "IKTarget", "BendBone", "ChainRootBone" };
            string[] bendlist = new string[] { "BendBone", };

            /*
             #if DEBUG
             * solver.spineStiffness = 1f;      //背骨の硬さ
             * //solver.rightLegMapping.weight = 0f;
             * //solver.leftLegMapping.weight = 0f;
             * if (!solver.bodyEffector.target || solver.bodyEffector.target.gameObject.name != bodytgt)
             *  solver.bodyEffector.target = new GameObject(bodytgt).transform;
             * solver.bodyEffector.positionWeight = 1f;
             * solver.bodyEffector.rotationWeight = 1f;
             * solver.rightShoulderEffector.positionWeight = 0.95f;
             * solver.leftShoulderEffector.positionWeight = 0.95f;
             * solver.rightShoulderEffector.rotationWeight = 0.5f;
             * solver.leftShoulderEffector.rotationWeight = 0.5f;
             *
             * solver.leftThighEffector.positionWeight = 1f;
             * solver.leftThighEffector.rotationWeight = 0.5f;
             * solver.rightThighEffector.positionWeight = 1f;
             * solver.rightThighEffector.rotationWeight = 0.5f;
             * solver.leftFootEffector.positionWeight = 1.0f;
             * solver.rightFootEffector.positionWeight = 1.0f;
             *
             * if (!solver.rightThighEffector.target || solver.rightThighEffector.target.gameObject.name != bodytgt)
             *  solver.rightThighEffector.target = new GameObject(bodytgt).transform;
             * if (!solver.leftThighEffector.target || solver.leftThighEffector.target.gameObject.name != bodytgt)
             *  solver.leftThighEffector.target = new GameObject(bodytgt).transform;
             *
             * if (!solver.rightFootEffector.target || solver.rightFootEffector.target.gameObject.name != bodytgt)
             *  solver.rightFootEffector.target = new GameObject(bodytgt).transform;
             * if (!solver.leftFootEffector.target || solver.leftFootEffector.target.gameObject.name != bodytgt)
             *  solver.leftFootEffector.target = new GameObject(bodytgt).transform;
             *
             * solver.rightLegMapping.weight = 0.2f;
             * solver.leftLegMapping.weight = 0.2f;
             * //Sync(solver.leftArmChain.bendConstraint.bendGoal.transform, solver.leftArmMapping.bone2);
             * //Sync(solver.rightArmChain.bendConstraint.bendGoal.transform, solver.rightArmMapping.bone2);
             * foreach (var e in solver.effectors)
             * {
             *  Sync(e);
             *  var tgtname = e.target.gameObject.name;
             *
             *  if (tgtlist.Contains(tgtname) || tgtname == bodytgt)
             *  {
             *      // COM3D2標準ターゲット
             *      e.target.transform.position = e.bone.position;
             *      e.target.transform.rotation = e.bone.rotation;
             *  }
             *  else if (bendlist.Contains(tgtname))
             *  {
             *      // COM3D2標準ターゲット
             *      e.target.transform.position = e.bone.position;
             *      e.target.transform.rotation = e.bone.rotation;
             *  }
             * }
             * return;
             #endif
             *
             */
            solver.spineStiffness     = 1f;   //背骨の硬さ
            solver.pullBodyVertical   = 0.5f; //ボディエフェクター位置補正
            solver.pullBodyHorizontal = 0f;

            foreach (var e in solver.effectors)
            {
                e.PinToBone(1f, 0f);
#if DEBUG
                e.PinToBone(1f, 1f);
#endif
                var tgtname = e.target.gameObject.name;

                if (tgtlist.Contains(tgtname))
                {
                    // COM3D2標準ターゲット
                    e.target.transform.position = e.bone.position;
                    e.target.transform.rotation = e.bone.rotation;
                }
            }
            solver.rightShoulderEffector.positionWeight = 0.95f;
            solver.leftShoulderEffector.positionWeight  = 0.95f;
            solver.bodyEffector.rotationWeight          = 1f;

            solver.rightLegMapping.maintainRotationWeight = 0f;
            solver.leftLegMapping.maintainRotationWeight  = 0f;
            solver.rightLegMapping.weight = 0f;
            solver.leftLegMapping.weight  = 0f;

            solver.rightArmMapping.maintainRotationWeight = 0f;
            solver.leftArmMapping.maintainRotationWeight  = 0f;
            solver.rightArmMapping.weight = 1f;
            solver.leftArmMapping.weight  = 1f;
        }
        private void IKInit(Maid slave, XtMasterSlave.MsLinks ms, XtMasterSlave.MsLinkConfig mscfg)
        {
            var fik = slave.body0.IKCtrl.GetNonPublicField <RootMotion.FinalIK.FullBodyBipedIK>("m_FullbodyIK");

            RootMotion.FinalIK.FullBodyBipedIK FullbodyIK = fik;
            var solver = FullbodyIK.solver;

            string[] tgtlist = new string[] { "IKTarget", "BendBone", "ChainRootBone" };

            bool animStop = true; //モーション停止中

            if (ms.doMasterSlave && !mscfg.doStackSlave_PosSyncMode)
            {
                animStop = false;
            }
            else
            {
                Animation anim = slave.body0.m_Bones.GetComponent <Animation>();
                animStop = !anim.isPlaying;
            }

            if (!lastAnimeFNs.ContainsKey(slave) || slave.body0.LastAnimeFN != lastAnimeFNs[slave])
            {
                lastAnimeFNs[slave] = slave.body0.LastAnimeFN;
                animStop            = false;
            }

            solver.spineStiffness           = 1f;   //背骨の硬さ
            solver.pullBodyVertical         = 0.5f; //ボディエフェクター位置補正
            solver.pullBodyHorizontal       = 0f;
            solver.spineMapping.twistWeight = 0f;

            foreach (var e in solver.effectors)
            {
                if (solver.leftHandEffector == e || solver.rightHandEffector == e)
                {
                    // 手のIKは本体側に任せる
                    continue;
                }

                bool donotPin = false;

                if (animStop || donotPin)
                {
                    e.positionWeight = 1f;
                    e.rotationWeight = 0f;
                }
                else
                {
                    e.PinToBone(1f, 0f);
                }

                var tgtname = e.target.gameObject.name;

                if (donotPin)
                {
                    continue;
                }
                else
                {
                    if (tgtlist.Contains(tgtname))
                    {
                        // COM3D2標準ターゲット
                        e.target.transform.position = e.bone.position;
                        e.target.transform.rotation = e.bone.rotation;
                    }
                }
            }

            solver.rightShoulderEffector.positionWeight = 0.95f;
            solver.leftShoulderEffector.positionWeight  = 0.95f;

            solver.bodyEffector.rotationWeight = 1f;

            solver.rightThighEffector.positionWeight = 0.95f;
            solver.leftThighEffector.positionWeight  = 0.95f;

            if (mscfg != null && mscfg.doFinalIKShoulderMove)
            {
                solver.rightShoulderEffector.positionWeight = 0f;
                solver.leftShoulderEffector.positionWeight  = 0f;
            }
            if (mscfg != null && mscfg.doFinalIKThighMove)
            {
                solver.bodyEffector.rotationWeight = 0f;

                solver.rightThighEffector.positionWeight = 0f;
                solver.leftThighEffector.positionWeight  = 0f;
            }

            foreach (var m in solver.limbMappings)
            {
                m.weight = 1f;
                m.maintainRotationWeight = 0f;
            }

            if (mscfg != null)
            {
                solver.rightLegMapping.weight = mscfg.fFinalIKLegWeight; //0.5f;
                solver.leftLegMapping.weight  = mscfg.fFinalIKLegWeight; //0.5f;
            }
            solver.rightLegMapping.maintainRotationWeight = 1f;
            solver.leftLegMapping.maintainRotationWeight  = 1f;
        }