Exemple #1
0
    void LateUpdate()
    {
        //lock swivel position to target
        transform.position = m_swivelTarget.position;

        //lerp camera distance
        m_curCameraDistance = Mathf.Lerp(m_curCameraDistance, m_desiredCameraDistance, cameraPositionLerpFraction * Time.deltaTime * 30f);
        m_curCameraHeight   = Mathf.Lerp(m_curCameraHeight, m_desiredCameraHeight, cameraPositionLerpFraction * Time.deltaTime * 30f);
        m_cameraObj.transform.localPosition = new Vector3(m_cameraObj.transform.localPosition.x, m_curCameraHeight, m_curCameraDistance);

        //force camera look
        if (cameraLookAtSwivel)
        {
            m_cameraObj.transform.rotation = Quaternion.LookRotation(transform.position - m_cameraObj.transform.position, m_characterController.KinematicCharacterMotor.CharacterUp);
        }

        //rotate towards velocity (check for 0 vel hitch bug and avoid drawing attention to it with camera)
        if (m_characterController.KinematicCharacterMotor.BaseVelocity.sqrMagnitude > 0f)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(m_characterController.KinematicCharacterMotor.BaseVelocity, m_characterController.KinematicCharacterMotor.CharacterUp), pitchLerpFraction * Time.deltaTime * 30f);
            Debug.DrawRay(transform.position, transform.forward * 10f, Color.cyan);
        }

        //debug to track sudden jerks in velocity
        float vel     = Vector3.Distance(m_lastPos, transform.position) / Time.deltaTime;
        float badness = Mathf.Abs(vel - m_lastVel) / 2f;

        if (badness > .75f)
        {
            DebugUtil.DrawDebugCross(transform.position, 1f, Color.red, 100f);
        }
        Debug.DrawLine(m_lastPos, transform.position, Color.Lerp(Color.green, Color.red, badness), 100f);
        m_lastVel = vel;
        m_lastPos = transform.position;
    }