/// <summary> /// /// </summary> public void BalanceLegMovement(LeaningDirection leaningDir) { switch (leaningDir) { case LeaningDirection.Forward: if (!_lastActiveLeg.Equals(ActiveLeg)) { _lastActiveLeg = ActiveLeg; _activeLegCoroutine = StartCoroutine( RotateLegJoints(_swing, _stance, _balanceForwardRots)); } break; case LeaningDirection.Backward: break; case LeaningDirection.Left: break; case LeaningDirection.Right: break; } }
/// <summary> /// /// </summary> public void WalkLegMovement() { if (!_lastActiveLeg.Equals(ActiveLeg)) { _lastActiveLeg = ActiveLeg; _activeLegCoroutine = StartCoroutine( RotateLegJoints(_swing, _stance, _WalkingForwardRots)); } }
private IEnumerator RotateLegJoints(Swing swing, Stance stance, LegTargetRotations tr) { float startElapsedTime = 0f; swing.Foot.GetComponent<Collider>().material = _slide; stance.Foot.GetComponent<Collider>().material = _rough; while (startElapsedTime < tr.StartPhaseDuration) { startElapsedTime += Time.fixedDeltaTime; float startPhasePerc = startElapsedTime / tr.StartPhaseDuration; swing.Upper.targetRotation = Quaternion.Lerp(swing.Upper.targetRotation, tr.SwingUpStart, _startPhaseAC.Evaluate(startPhasePerc)); swing.Lower.targetRotation = Quaternion.Lerp(swing.Lower.targetRotation, tr.SwingLowStart, _startPhaseAC.Evaluate(startPhasePerc)); swing.Foot.targetRotation = Quaternion.Lerp(swing.Foot.targetRotation, tr.SwingFootStart, _startPhaseAC.Evaluate(startPhasePerc)); stance.Upper.targetRotation = Quaternion.Lerp(stance.Upper.targetRotation, tr.StanceUpStart, _startPhaseAC.Evaluate(startPhasePerc)); stance.Lower.targetRotation = Quaternion.Lerp(stance.Lower.targetRotation, tr.StanceLowStart, _startPhaseAC.Evaluate(startPhasePerc)); stance.Foot.targetRotation = Quaternion.Lerp(stance.Foot.targetRotation, tr.StanceFootStart, _startPhaseAC.Evaluate(startPhasePerc)); yield return null; } float endElapsedTime = 0f; swing.Foot.GetComponent<Collider>().material = _rough; stance.Foot.GetComponent<Collider>().material = _slide; while (endElapsedTime < tr.EndPhaseDuration) { endElapsedTime += Time.fixedDeltaTime; float endPhasePerc = endElapsedTime / tr.EndPhaseDuration; swing.Upper.targetRotation = Quaternion.Lerp(swing.Upper.targetRotation, tr.SwingUpEnd, _endPhaseAC.Evaluate(endPhasePerc)); swing.Lower.targetRotation = Quaternion.Lerp(swing.Lower.targetRotation, tr.SwingLowEnd, _endPhaseAC.Evaluate(endPhasePerc)); swing.Foot.targetRotation = Quaternion.Lerp(swing.Foot.targetRotation, tr.SwingFootEnd, _endPhaseAC.Evaluate(endPhasePerc)); stance.Upper.targetRotation = Quaternion.Lerp(stance.Upper.targetRotation, tr.StanceUpEnd, _endPhaseAC.Evaluate(endPhasePerc)); stance.Lower.targetRotation = Quaternion.Lerp(stance.Lower.targetRotation, tr.StanceLowEnd, _endPhaseAC.Evaluate(endPhasePerc)); stance.Foot.targetRotation = Quaternion.Lerp(stance.Foot.targetRotation, tr.StanceFootEnd, _endPhaseAC.Evaluate(endPhasePerc)); yield return null; } ActiveLeg = ActiveLeg.Equals(ActiveLeg.Left) ? ActiveLeg.Right : ActiveLeg.Left; SetSwingStance(); }