// Fixed update is called in sync with physics
    private void FixedUpdate()
    {
        // read inputs
        // float h = CrossPlatformInputManager.GetAxis("Horizontal");
        float h = CustomInputManager.GetAxis("Horizontal", CustomInputManager.InputMode.Gameplay);
        // float v = CrossPlatformInputManager.GetAxis("Vertical");
        float v = CustomInputManager.GetAxis("Vertical", CustomInputManager.InputMode.Gameplay);
        bool crouch = Input.GetKey(KeyCode.C);

        // calculate move direction to pass to character
        if (m_Cam != null)
        {
            // calculate camera relative direction to move:
            m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
            m_Move = v*m_CamForward + h*m_Cam.right;
        }
        else
        {
            // we use world-relative directions in the case of no main camera
            m_Move = v*Vector3.forward + h*Vector3.right;
        }

#if !MOBILE_INPUT
        // walk speed multiplier and clamp
        if (Input.GetKey(KeyCode.LeftShift))
        {
            m_Move *= 0.5f;
            m_Move = m_Move.ClampMaxMagnitude(0.5f);
        }
#endif

        // pass all parameters to the character control script
        m_Character.Move(m_Move, crouch, m_Jump);
        m_Jump = false;
    }