[UE4] Command 명령어-3 : Player/Player Start 위치 변경 (FConsoleCommandWithWorldAndArgsDelegate)
🚩 Player / Player Start 위치 변경 명령어
커스텀 Command 명령어를 제작하여 Player Start의 위치를 변경시키는 기능을 만들어보았다.
게임이 플레이중이라면 플레이어의 위치를 변경하고, 플레이중이 아니라면 Player Start의 지점을 변경시키도록 구현하였다.
우선, 새로운 명령어 추가를 위한 IConsoleCommand 객체를 새로 생성해주었다.
ExampleConsoleCommand 파일의 생성자에선 Command로 뷰포트의 World에 접근할 수 있는 FConsoleCommandWithWorldAndArgsDelegate 객체를 생성하고, 명령어를 델리게이트에 등록해주었다.
명령어의 이름은 "MoveToPlayer"라고 지정한 뒤, ExampleConsoleCommand 클래스의 MoveToPlayer 함수를 바인딩하였다.
MoveToPlayer 함수는 명령어의 기능을 실질적으로 구현하는 함수이다.
매개변수로 Location의 x,y,z 값을 받아야하기 때문에 매개변수의 개수(InArgs.Num())가 3개 이하라면 함수를 중단한다.
3개를 다 입력받았다면 FString값인 매개변수를 Atof 함수로 float형으로 변환한 뒤 FVector의 position값으로 저장한다.
게임이 실행중이라면 World에 존재하는 PlayerController를 받아오고, 이를 통해 ACharacter를 불러왔다.
이후, Character의 SetActorLocation 함수로 위치를 변경해주었다.
게임이 실행중이 아니라면, PlayerController를 받아오지 못하기때문에, 현재 World의 존재하는 모든 Actors 중에 이름이 PlayerStart인 객체를 찾아 위치를 변경해주었다.
이제 만들어진 명령어를 실행시킨 결과를 확인해보자.
👾 게임플레이 상태
만들어진 명령어를 실행시켜보았다.
MoveToPlayer 명령어와 position 값 3개를 전달하였다.
명령어를 입력하는 순간 플레이어의 위치가 바로 변경되었다.
👾 게임 플레이 중이 아닐때
게임이 플레이되고있지 않을때 Player Start의 위치를 변경시켜보았다.
명령어를 입력하고난 후 PlayerStart의 위치를 확인해보면 입력한 위치값대로 옮겨져있는것을 확인할 수 있었다.