오늘은 어제 만든 분수를 회전시키는 방법과
프레임워크 제작을 하고자 한다
목차는 이렇게 된다
1. 액터를 회전시키는 법
2. U클래스와 A클래스의 차이
3. IWYU에 대해
4. 프레임워크 제작
어제 만들어둔 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
와 비슷하게 매 프레임 호출되는 이벤트 함수이다
언리얼 엔진을 접하면서 처음 접한 궁금증은 접두어 U와 A의 차이였다
U Class
는 Actor 클래스가 아닌 Class 에 붙이게 되고(ex: UStaticMeshComponent)
A Class
는 Actor인 클래스에 붙이게 된다 (ex: AFountain)
IWYU(include what you use)
는 언리얼엔진 4.15버젼부터 변경된 새로운 방식이다
이전에는EngineMinimal.h
라는 다양한 엔진 클래스를 모아둔 헤더를 사용했는데,
컴파일 속도의 향상과 불필요한 헤더파일 참조를 줄이기 위해 최소한의 필수 헤더만 참조하는CoreMinimal.h
를 쓰도록 변경되었다
초보일때는 어떤 헤더에 어떤 기능이 있을지 모르니 EngineMininal.h
를 쓰는 편이 좋겠고,
숙달되었다면 CoreMinimal.h 를 사용해 필수적인 헤더만 포함시키는 것이 좋겠다
언리얼 엔진은 게임의 규칙을 관리하는
게임모드
와 플레이어가 조종하는 액터인플레이어컨트롤러
,
플레이어컨트롤러
의 명령을 받는폰
이 게임을 시작하는데 필수적이다
이 3가지 액터를 생성하고 각각 무슨 역할을 하는지 알아보고자 한다
게임모드
: 게임의 규칙을 관리한다 가령 아군을 공격했을시 아군이 데미지를 받을지,
아니면 무시할지에 대한 부분을 게임모드 액터를 통해 관리하게 된다
플레이어컨트롤러
: 유저가 입력한 조작을 받는 무형의 액터이다 폰을 조종하는 역할
폰
: 유저가 플레이어컨트롤러를 통해 받은 입력을 통해 움직이는 캐릭터이다
플레이어컨트롤러
와폰
이 결합되면 Unity3D의characterController
와 비슷하다
월드 세팅 창에 GameMode Override를 확인하면 현재는 none으로 되어 있는 것을 확인 할 수 있다
이제 게임모드를 추가하기 위해 게임모드를 상속받는 ABGameMode 클래스, 폰을 상속받는 ABPawn 클래스,
플레이어 컨트롤러를 상속받는 ABPlayerController를 만들어주자
이후 ABGameMode.h 에 생성자를 선언하고, cpp 파일에서 ABPawn.h 와 ABPlayerController.h 를 include 시켜준다
이후 생성자에서 DefaultPawnClass와 PlayerControllerClass 를 선언해주게 StaticClass로 선언해주면 된다
마지막으로 GameMode Override 에서 드랍다운을 클릭해 만들어둔 클래스인 ABGameMode로 바꿔주면 설정이 완료된다