示例#1
0
    /// <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;
        }
    }
示例#2
0
 /// <summary>
 /// 
 /// </summary>
 public void WalkLegMovement()
 {
     if (!_lastActiveLeg.Equals(ActiveLeg))
     {
         _lastActiveLeg = ActiveLeg;
         _activeLegCoroutine = StartCoroutine(
             RotateLegJoints(_swing, _stance, _WalkingForwardRots));
     }
 }
示例#3
0
    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();
    }