[UE_5] Top Down Click 이동 구현
기본적으로 언리얼엣허 제공하는 TopDown은 click to Move가 StandAlone에서는 가능하지만, 멀티(Server,Client) 로 했을때는 이동이 안된다. 그런데 꾹 누르고 있으면 이동이 가능하다.
이유는 꾹 누를때는 ControllerPawn 의 AddMovementInput을 사용하기 때문이고 (이는 레플리케이션을 지원함)
마우스 클릭을 놓았을때 지정된 목적지로 이동하는 코드에서
SimpleMoveToLocation을 하는데 이 기능은 레플리케이션을 지원하지 않아서 발생하는 문제이다.
그래서 새로이 구현할때는 AddMovementInput을 사용하는 것이 좋다.
그리고 이 기능은 PathFinding까지 구현이 되어있는 상태이지만, 이걸 안쓰고 AddMovementInput을 사용해야 한다면 PathFinding까지 구현해야 한다.
Spline으로 장애물을 넘어가는 것을 구현해야 함.
먼저 Controller에 접근한다.
필요한 변수는
목적지
캐릭터가 마우스까지 따라가는 시간
클릭 했을때 임계값
자동이동인지 확인하는 bool
마우스를 눌렀을때 타게팅이 되었는지 확인하는 bool
자동이동을 허락하는 반경
PathFinding을 통해서 장애물을 지나갈때 생기는 곡선
이다.
그리고 GameAbilitySystem에서 InputTag설정을 미리 해두었다. 그래서 Input_LMB,Input_RMB 등이 존재하고
Controller에서 클릭을 했을때
해당 태그가 GameplayTagContainer와 일치하는지 확인한다.
먼저 구현할 부분은, 마우스 클릭을 누르고 있고, 타겟이 없을때 이동을 할수 있게 구현하는 것이다.
목적지에 데이터를 저장하고
컨트롤러를 할당받은 pawn(캐릭터)이 목적지와 자신의 위치를 빼고, Normalize한 방향을 WorldDirection에 저장한다.
이후에 AddMovementInput을 통해서 Pawn을 이동시킨다.
다음은 클릭을 끝냈을때, AutoRun을 통해서 캐릭터를 이동시키는 걸 구현해야 한다.
윗부분은 Hold 부분과 유사하고, Targeting이 없을때만 바뀌면된다. 클릭을 누르고 있을때는 WorldDirection으로 나아갔지만, 클릭이 끝났을때는 마우스가 찍었던 위치에 이동해야 하고, 장애물이 있다면 곡선을 통해 피해가야한다.
일단 이러면 해당 장소까지는 디버깅까지 되나, 중요한건 이제 이동을 해야 한다.
이제 구현할 부분은 AutoRun 이다.
LocationOnSpline 을 통해서 Direction을 구해서 Pawn을 이동시키면 되는데, AutorunRadius를 벗어나면 Autorun이 끊기도록 설정해두도록 하면 된다.
이동은 아까와 같이 AddMovementInput을 통해 하면된다.
중요한점은 멀티플레이에서 Navi가 Client에서도 적용되도록 해야 함으로
Allow Client Side Navigation을 꼭 체크해두도록 하자.
AutoRun을 Tick에 다가 배치해두면, 실제로 이동하는 것이 잘 작동된다.