public void ProcParam2(Maid slave, XtMasterSlave.MsLinks ms) { if (slave && !slave.boMAN && this.Hold_SlaveMaskItems.Length > 0) { //衣装マスク設定あり ms.holdSlvMask = true; ms.holdSlvMaskMaid = slave; ms.holdSlvMaskItems.Clear(); foreach (var s in this.Hold_SlaveMaskItems) { ms.holdSlvMaskItems.Add(s); } } }
public override bool UpdateFinalIK(Maid maid, XtMasterSlave.MsLinks ms, XtMasterSlave.MsLinkConfig mscfg) { if (!maid || !maid.body0) { return(false); } needInit = false; if (mscfg.doIK159NewPointToDef) { IKInit(maid, ms, mscfg); } #if DEBUG else { IKInit4OldPoint(maid); } #endif return(true); // 実行できたか }
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; }
//この保存用クラスに読込 public void SetParam(bool linking, bool isMasterMaid, XtMasterSlave.MsLinks ms) { doMasterSlave = linking; this.isMasterMaid = isMasterMaid; XtMasterSlave.ManInfo master = null; XtMasterSlave.ManInfo slave = null; if (ms.mdMaster_No >= 0) { master = new XtMasterSlave.ManInfo(ms.mdMasters[ms.mdMaster_No].mem, ms.mdMaster_No); } if (ms.mdSlave_No >= 0) { slave = new XtMasterSlave.ManInfo(ms.mdSlaves[ms.mdSlave_No].mem, ms.mdSlave_No); } if (master != null) { if (master.mem.boMAN) { Master_Name = XtMasterSlave.GetMaidName(master); } else { Master_Name = XtMasterSlave.GetMaidName(master.mem); } Master_ID = master.mem_id; } else { Master_Name = string.Empty; Master_ID = ms.mdMaster_No; } if (slave != null) { if (slave.mem.boMAN) { Slave_Name = XtMasterSlave.GetMaidName(slave); } else { Slave_Name = XtMasterSlave.GetMaidName(slave.mem); } Slave_ID = slave.mem_id; } else { Slave_Name = string.Empty; Slave_ID = ms.mdSlave_No; } if (master != null) { Scale_Master = (master.mem.gameObject.transform.localScale.x + master.mem.gameObject.transform.localScale.y + master.mem.gameObject.transform.localScale.z) / 3; } if (slave != null) { Scale_Slave = (slave.mem.gameObject.transform.localScale.x + slave.mem.gameObject.transform.localScale.y + slave.mem.gameObject.transform.localScale.z) / 3; } if (master != null) { if (master.mem.boMAN) { Master_Hide = !XtMasterSlave.GetManVisible(master.mem); Cnk_Visible = XtMasterSlave.GetChinkoVisible(master.mem.body0); Cnk_Scale = XtMasterSlave.GetChinkoScale(master.mem.body0).x; manAlpha = XtMasterSlave.GetManAlpha(master.mem); Cnk_OffsetPos = XtMasterSlave.v3Tofa(XtMasterSlave.GetChinkoPos(master.mem.body0)); } else { Master_Hide = XtMasterSlave.GetStateMaskItemsAll(master.mem); if (slave.mem.boMAN) { Cnk_Visible = XtMasterSlave.GetChinkoVisible(slave.mem.body0); Cnk_Scale = XtMasterSlave.GetChinkoScale(slave.mem.body0).x; manAlpha = XtMasterSlave.GetManAlpha(slave.mem); Cnk_OffsetPos = XtMasterSlave.v3Tofa(XtMasterSlave.GetChinkoPos(slave.mem.body0)); } } } if (slave != null) { if (!slave.mem.boMAN) { Stgt_boHeadToCam = slave.mem.body0.boHeadToCam; Stgt_boEyeToCam = slave.mem.body0.boEyeToCam; //Stgt_hashTarget = slave.mem.body0.trsLookTarget.GetHashCode(); Stgt_sBoneName = slave.mem.body0.trsLookTarget.name; switch (Stgt_sBoneName) { case "Bip01 Head": break; case "_IK_vagina": break; case "ManBip Head": break; case "chinko2": break; default: Stgt_sBoneName = string.Empty; break; } } } if (slave != null) { if (!slave.mem.boMAN) { //アイテムマスク if (ms.holdSlvMask && ms.holdSlvMaskMaid == slave.mem) { Hold_SlaveMaskItems = ms.holdSlvMaskItems.ToArray(); } else { Hold_SlaveMaskItems = new string[0]; } } } }
/*public UserConfigPage(bool linking, bool isMasterMaid, XtMasterSlave.ManInfo master, XtMasterSlave.ManInfo slave) * { * SetParam(linking, isMasterMaid, master, slave); * } * * public void SetParam(bool linking, bool isMasterMaid, XtMasterSlave.ManInfo master, XtMasterSlave.ManInfo slave) */ public UserConfigPage(bool linking, bool isMasterMaid, XtMasterSlave.MsLinks ms) { SetParam(linking, isMasterMaid, ms); }