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; }