플렛포머게임 제작중입니다
이동로직이랑 공격로직이 서로 기능을 막는 상황이 생겨서 조언 구합니다.
설명이 좀 장황할 수 있는데 부족한 부분 있으면 갈궈주시면 다시 잘 설명드리겠습니다.. 



1.이동로직
명령한 방향으로 일정한 물리력을 줘서 캐릭터를 밀어내는 방식으로 구현했음(키 꾹누르면 연속적으로 입력이 가능)
Rigid.AddForce(Vector2.right * 1, ForceMode2D.Impulse); 처럼..

그러다보니까 키입력을 계속하면 가속도가 무한히 늘어나서 속도가 너무 빨라지는 문제 때문에 maxspeed라는 변수를 정의해놓고
Velocity 값이 maxspeed보다 커지면 최대속도값만 반환하는 식으로 최대속도를 정했습니다.

2.공격로직(돌진공격으로, 단발입력 통해서 짧은 거리 돌진하면서 공격하는게 목표)
같은 방식으로 Rigid.AddForce 써서 구현했는데..이렇게 하면 최대속력 제한때문에 단발적인 돌진 이동이 되지 않는 문제가 생깁니다.
(정확히는 되긴 되는데 maxspeed의 가속도 제한에 막혀서 진짜 눈에 안보일만큼 미세하게 움직임)


키의 연속입력이 가능한 이동로직은 maxspeed로 가속도를 제한해도 잘만 움직이는데
단발입력으로 작동하는 공격로직은 maxspeed 제한을 직격으로 쳐맞아서 돌진거리 확보가 안되는게 지금 발생한 문제입니다.
 
그렇다고 maxspeed 제한을 늘리면 캐릭터 이동속도가 너무 빨라지고..
해서 특정 액션에 의한 이동은 최대 가속도 제한의 영향을 받지 않게 하는 법이 있을지 조언 구합니다.



3줄요약
1.돌진공격 구현중
2.돌진공격의 이동방식도 좌우이동이랑 마찬가지로 명령방향으로 물리력을 부여해서 이동시키는 방식인데
  딜레이 없이 연속입력이 가능한 이동 기능과 달리 단발적으로 한번만 물리력을 부여하는 공격 기능은 이동기능 구현시에 만든 최대 velocity 값에 막혀서
  원하는 만큼 돌진이 안되고 있음
3.특정 액션이 이 최대 velocity 값에 걸리지 않게 하는 방법이 있을지..


작성 코드


private void FixedUpdate()
    {
        //좌,우이동로직 
        //AddForce를 통해 X값에 Right(양수)*수평입력값의 힘을 가해준다.
        if ((Input.GetKey(KeyCode.D) || RightInput == true)&& WhileAttack == false)
        {    
            Rigid.AddForce(Vector2.right * 1, ForceMode2D.Impulse);
        }

        if ((Input.GetKey(KeyCode.A) || LeftInput == true) && WhileAttack == false)
        {
            Rigid.AddForce(Vector2.left * 1, ForceMode2D.Impulse);
        }

        //공격로직(공격중이 아니고 공격횟수가 0 이상일 때 키입력시 작동) 
        if ((Input.GetKey(KeyCode.S) || AttackInput == true)&& WhileAttack == false && AttackPoint > 0)
        {
            //공격횟수를 1 소모하고 공격중 상태로 만든다.
            AttackPoint -= 1;
            WhileAttack = true;
            
            //보고있는 방향에 따라 해당 방향으로 돌진시킨다.(방향전환 시 flipX로 스프라이트 뒤집는걸 이용했음)
            if(Renderer.flipX == true)
            {
                Rigid.AddForce(new Vector2(-100,1), ForceMode2D.Impulse);
            }
            if (Renderer.flipX == false)
            {
                Rigid.AddForce(new Vector2(300,1), ForceMode2D.Impulse);
            }

            //2초후에 공격상태를 해제한다.
            Invoke("AttackEnd", 2);
            //공격입력을 다시 false로 돌린다.
            AttackInput = false;
        }


 //최고속도 로직. x의 가속도 값이 maxspeed보다 크다면 x값을 최대속도로 반환한다. 
        if (Rigid.velocity.x > MaxSpeed)
        {
            Rigid.velocity = new Vector2(MaxSpeed, Rigid.velocity.y);
        }
      
        else if (Rigid.velocity.x < MaxSpeed * (-1))
        {
            Rigid.velocity = new Vector2(MaxSpeed * (-1), Rigid.velocity.y);
        }