Side movement 3d runner
Hello. In my 3d runner I'm moving chararcter without any force, so now I need to write code using MovePosition. For now in coroutines I change delta X position and in FixedUpdate move character.
Moving position:
 m_playerPhysics.MovePosition(new Vector3(m_currentPositionX, m_jumpStartY + m_playerCollider.height / 2 + m_CurrentJumpHeight, 0));
 
               Changing delta X:
 private void LeftSwype()
     {
         //StopCoroutine(MoveRight());
         StopAllCoroutines();
 
         StartCoroutine(MoveLeft());
     }
 
     private void RightSwype()
     {
         //StopCoroutine(MoveLeft());
         StopAllCoroutines();
         StartCoroutine(MoveRight());
     }
 
     private IEnumerator MoveLeft()
     {
         var startPosX = m_currentPositionX;
         float targetPosX = 0;
         if (m_currentPositionX == 0)
         {
             targetPosX = -m_SideMovementLimit;
         }
         else if (startPosX > 0)
         {
             targetPosX = 0;
         }
         else
         {
             yield break;
         }
 
         while (true)
         {
             //m_currentPositionX = Mathf.Lerp(m_currentPositionX, targetPosX, m_SideMovementSpeed);
             
             if (targetPosX == -m_SideMovementLimit && m_currentPositionX + m_SideMovementLimit < 0.05f)
             {
                 m_currentPositionX = -m_SideMovementLimit;
                 yield break;
             }
             else if (targetPosX == 0 && m_currentPositionX < 0.05f)
             {
                 m_currentPositionX = 0;
                 yield break;
             }
 
             m_currentPositionX -= m_SideMovementSpeed;
 
             yield return null;
         }
     }
 
     private IEnumerator MoveRight()
     {
         var startPosX = m_currentPositionX;
         float targetPosX = 0;
         if (m_currentPositionX == 0)
         {
             targetPosX = m_SideMovementLimit;
         }
         else if (startPosX < 0)
         {
             targetPosX = 0;
         }
         else
         {
             yield break;
         }
 
         while (true)
         {
             //m_currentPositionX = Mathf.Lerp(m_currentPositionX, targetPosX, m_SideMovementSpeed);
             
             if (targetPosX == m_SideMovementLimit && m_SideMovementLimit - m_currentPositionX < 0.05f)
             {
                 m_currentPositionX = m_SideMovementLimit;
                 yield break;
             }
             else if (targetPosX == 0 && -m_currentPositionX < 0.05f)
             {
                 m_currentPositionX = 0;
                 yield break;
             }
 
             m_currentPositionX += m_SideMovementSpeed;
 
             yield return null;
         }
     }
 
 
               Is that a good way? Actually, also I have problems with pressing right when moving left. Sometimes moving just stops in the middle of action.
               Comment
              
 
               
              Your answer