블루프린트 없이 C++로 액터 회전시키기, 프레임워크 제작

유영준·2023년 1월 1일
0
post-thumbnail

오늘은 어제 만든 분수를 회전시키는 방법과
프레임워크 제작을 하고자 한다

목차는 이렇게 된다
1. 액터를 회전시키는 법
2. U클래스와 A클래스의 차이
3. IWYU에 대해
4. 프레임워크 제작

1. 액터를 회전시키는 법

어제 만들어둔 Fountain.h 파일에 이동을 책임지는 Movement 변수와
회전속도를 저장하는 float 변수 RotateSpeed를 만들어준다

private으로 변수를 두게 되면 기본적으로는 접근이 불가능하지만,
AllowPrivateAccess를 True로 두면 추후 블루프린트에서 접근이 가능해진다

이후 cpp파일에서 Movement 변수를 생성해주고

속도를 정하고 FRotator를 통해 회전을 시켜주면 된다

Unity3D 는 Rotation 변수가 ( X, Y, Z ) 의 순서로 저장되지만, Unreal Engine 에서는 ( Y, Z, X )의 순서로 저장된다
Vector 값은 동일하게 X, Y, Z 의 순서로 저장되는 것과는 차별된다

잘 회전하는 모습을 볼 수 있다


추가로 Movement 변수를 만들지 않고 Tick 함수 내부에서 매 프레임 회전하도록 호출 할 수도 있다

Tick 함수는 Unity3D 상의 Fixed Update와 비슷하게 매 프레임 호출되는 이벤트 함수이다


2. U클래스와 A클래스의 차이

언리얼 엔진을 접하면서 처음 접한 궁금증은 접두어 U와 A의 차이였다
U Class 는 Actor 클래스가 아닌 Class 에 붙이게 되고(ex: UStaticMeshComponent)
A Class 는 Actor인 클래스에 붙이게 된다 (ex: AFountain)


3. IWYU에 대해

IWYU(include what you use)는 언리얼엔진 4.15버젼부터 변경된 새로운 방식이다
이전에는 EngineMinimal.h라는 다양한 엔진 클래스를 모아둔 헤더를 사용했는데,
컴파일 속도의 향상과 불필요한 헤더파일 참조를 줄이기 위해 최소한의 필수 헤더만 참조하는 CoreMinimal.h를 쓰도록 변경되었다

초보일때는 어떤 헤더에 어떤 기능이 있을지 모르니 EngineMininal.h 를 쓰는 편이 좋겠고,
숙달되었다면 CoreMinimal.h 를 사용해 필수적인 헤더만 포함시키는 것이 좋겠다


4. 프레임워크 제작

언리얼 엔진은 게임의 규칙을 관리하는 게임모드와 플레이어가 조종하는 액터인 플레이어컨트롤러 ,
플레이어컨트롤러 의 명령을 받는 이 게임을 시작하는데 필수적이다
이 3가지 액터를 생성하고 각각 무슨 역할을 하는지 알아보고자 한다

게임모드 : 게임의 규칙을 관리한다 가령 아군을 공격했을시 아군이 데미지를 받을지,
아니면 무시할지에 대한 부분을 게임모드 액터를 통해 관리하게 된다

플레이어컨트롤러 : 유저가 입력한 조작을 받는 무형의 액터이다 폰을 조종하는 역할

: 유저가 플레이어컨트롤러를 통해 받은 입력을 통해 움직이는 캐릭터이다

플레이어컨트롤러이 결합되면 Unity3D의 characterController와 비슷하다

월드 세팅 창에 GameMode Override를 확인하면 현재는 none으로 되어 있는 것을 확인 할 수 있다

이제 게임모드를 추가하기 위해 게임모드를 상속받는 ABGameMode 클래스, 폰을 상속받는 ABPawn 클래스,
플레이어 컨트롤러를 상속받는 ABPlayerController를 만들어주자

이후 ABGameMode.h 에 생성자를 선언하고, cpp 파일에서 ABPawn.h 와 ABPlayerController.h 를 include 시켜준다

이후 생성자에서 DefaultPawnClass와 PlayerControllerClass 를 선언해주게 StaticClass로 선언해주면 된다

마지막으로 GameMode Override 에서 드랍다운을 클릭해 만들어둔 클래스인 ABGameMode로 바꿔주면 설정이 완료된다

profile
토비폭스가 되고픈 게임 개발자

0개의 댓글