Unreal Engine

UE4. 플레이어 위치 찾기

PPODO 2018. 8. 14. 22:49



새로운 Actor Class 를 하나 추가해 줍시다.



언리얼에서 디버깅을 하는 방법은 두 가지로 플레이 화면에 출력 하는 방법과 콘솔창에 출력하는 방법이 있습니다.

이번에는 화면에 직접 출력 할 것인데, 그러기 위해서는 GEngine이라는 인스턴스에 접근을 해야 합니다.

그러기 위해서는 Engine.h 헤더를 include 해야 사용 가능하므로 Engine/Enine.h 헤더를 include 해줍시다.



짧게 설명드리자면 생성자는 언리얼 에디터가 실행될 때 한 번, BeginPlay는 게임 시작시 한 번, Tick은 매 프레임마다 한 번씩 호출이 됩니다.

생성자 부분에 PrimaryActorTick.bCanEverTick을 false로 설정하시면 Tick이 실행이 되지 않으며, 퍼포먼스의 상향이 있습니다.

이번에는 플레이어의 위치를 매 프레임마다 출력해야 하므로 true로 설정하시면 됩니다.


위의 사진은 현재 플레이어의 위치값을 FVector 변수에 저장해주는 코드입니다.

코드를 쉽게 풀어서 설명해 드리자면

현재 월드에 존재하는 플레이어의 컨트롤을 가져온 후, 컨트롤러가 빙의된 Pawn에 접근하여 위치를 가져온다. 라고 설명해 드릴 수 있겠네요.

Pawn은 플레이어 컨트롤러나 AI가 소유할 수 있는 액터의 기본 단위 입니다.

Pawn또한 Actor에서 파생되었기에 GetActorLocation이라는 함수를 사용할 수 있는거구요.



위의 사진이 완성된 코드입니다.


AddOnScreenDebugMessage함수로 넘어가는 인수에 대해 설명을 드리자면


첫 번째 인수 : 첫 번째 인수는 두 가지의 값이 넘어갈 수 있습니다. 하나는 양수고 또 다른 하는 음수이지요. 양수가 넘어갈 경우 아래의 사진처럼



출력되고, 음수가 넘어갈 경우 아래의 사진처럼 출력이 됩니다.




두 번째 인수 : 몇초간 화면에 출력이 될 것인지(위의 코드는 5초로 설정)

세 번째 인수 : 출력될 글자의 색상(위의 코드는 빨강)

네 번째 인수 : 출력할 문자열

입니다.

네 번째 인수가 좀 특이한 모양을 가지고 있지요? 찬찬히 하나씩 살펴보도록 합시다.

FString::Printf 는 WinAPI에서의 wsprintf와 같은 역할을 해줍니다. 넘어가는 인수는 const TCHAR* 형이라 TEXT() 매크로나 문자열 앞에 'L'을 붙여주셔야 하구요.

*PlayerPosition.ToString() 이 구문을 보시면 대충 무엇을 해주는 함수인지 감이 오시는 분들이 계실겁니다. 그런데 앞에 *연산자가 왜 붙는지에 대해서는 이해가 되질 않으시겠지요. 



언리얼에서의 FString은 TCHAR형으로 바로 사용이 불가능하고, 사용하기 위해서는 변환을 거칠 필요가 있습니다.

위의 사진은 FString 헤더 파일에 있는 함수인데, *연산자가 FString을 TCHAR* 로 변환하여 리턴하도록 오버로딩이 되있는걸 확인하실 수 있습니다.

*연산자가 붙은 이유가 어느정도 이해되셨나요?