// Update is called once per frame
    void Update()
    {
        float speedMagnitude = controller.Vel.magnitude;

        // bob logic
        float desiredScale = controller.MidAir ? 0 : Mathf.Min(speedMagnitude / controller.speed, 1);

        _speedJumpLerp = PrintUtil.Damp(_speedJumpLerp, desiredScale, transitionLambda, Time.deltaTime);
        float desiredSprintScale = controller.MidAir ? 0 : Mathf.Clamp(speedMagnitude / controller.speed - 1, 0, 1);

        _sprintLerp = PrintUtil.Damp(_sprintLerp, desiredSprintScale, transitionLambda, Time.deltaTime);

        // update distance moved
        _distanceMoved += speedMagnitude * Time.deltaTime;

        // walking animation
        float bounce = (Mathf.Abs(Mathf.Sin(_distanceMoved * bobSpeed / controller.speed)) * bobHeight - _halfBobHeight) * _speedJumpLerp;
        float shift  = (Mathf.Cos(_distanceMoved * bobSpeed / controller.speed) * shiftWidth - _halfShiftWidth) * _sprintLerp;

        _rotXShift = PrintUtil.Damp(_rotXShift, -controller.DRotY * sway / Time.deltaTime, swayLambda, Time.deltaTime);
        _rotYShift = PrintUtil.Damp(_rotYShift, controller.DRotX * sway / Time.deltaTime, swayLambda, Time.deltaTime);

        // vert velocity shift
        float desiredVerticalShift = controller.MidAir ? Mathf.Clamp(controller.Vel.y * verticalVelocityInfluence,
                                                                     -verticalInfluenceClamp, verticalInfluenceClamp) : 0;

        _verticalVelocityShift = PrintUtil.Damp(_verticalVelocityShift, desiredVerticalShift, transitionLambda, Time.deltaTime);

        transform.localPosition = new Vector3(shift + _rotXShift, bounce + _rotYShift, 0);
        transform.position     += new Vector3(0, _verticalVelocityShift, 0);
    }
    void Update()
    {
        // rotation
        _cameraKickRot *= (Quaternion.SlerpUnclamped(Quaternion.identity, _cameraKickVel, Time.deltaTime));
        _cameraKickVel  = PrintUtil.Damp(_cameraKickVel, Quaternion.identity, kickVelLambda, Time.deltaTime);
        _cameraKickRot  = PrintUtil.Damp(_cameraKickRot, Quaternion.identity, kickLambda, Time.deltaTime);

        // position
        _cameraBouncePos += _cameraBounceVel * Time.deltaTime;
        _cameraBounceVel  = PrintUtil.Damp(_cameraBounceVel, Vector3.zero, bounceVelLambda, Time.deltaTime);
        _cameraBouncePos  = PrintUtil.Damp(_cameraBouncePos, Vector3.zero, bounceLambda, Time.deltaTime);
    }
Example #3
0
    void CameraMovement()
    {
        Vector2 deltaAim = m_Aim.ReadValue <Vector2>();

        _dRotX  = (invertMouseY ? 1 : -1) * deltaAim.y * sensitivity;
        _lookX += _dRotX;
        _lookX  = Mathf.Clamp(_lookX, -90, 90);

        _dRotY  = deltaAim.x * sensitivity;
        _lookY += _dRotY;

        cam.transform.localRotation = Quaternion.Euler(_lookX, _lookY, 0) * kickController.CameraKickRot;

        // move camera ahead a bit if grounded
        _cameraXZPos = !_midAir && cameraVelocityShift
            ? PrintUtil.Damp(_cameraXZPos, new Vector2(_vel.x, _vel.z) *cameraVelocityShiftScale, 10f,
                             Time.deltaTime)
            : PrintUtil.Damp(_cameraXZPos, Vector2.zero, 10f, Time.deltaTime);

        cam.transform.localPosition = _initialCameraPos + new Vector3(_cameraXZPos.x, 0, _cameraXZPos.y);
        cam.transform.position     += kickController.CameraBouncePos;
    }