Unreal 엔진의 기초
Unreal은 월드 안의 요소(게임 객체)들의 유형이 정해져 있다.
Unity는 컴포넌트를 조립하여 요소의 유형을 결정한다.
Unreal은 C++ 게임 객체를 만들 때 부모 클래스의 종류를 정해주며 시작한다. (만들 때 부모 클래스를 지정한다.)
Unity는 아무것도 없는 객체에 컴포넌트를 붙이는 방식이라면 Unreal은 종류가 정해진 객체에 컴포넌트를 붙이는 방식
이런 관점에서는 Unity가 Unreal보다 자유도가 더 높다.
Object (Unreal 게임 객체의 최상위 클래스)
ㄴ Actor
ㄴ Pawn
ㄴ Character
Actor 클래스 (AActor를 상속받음)
ㄴ BeginPlay() : 스폰될 때 한 번 실행되는 함수
ㄴ Tick() : 매 프레임 호출되는 함수
Unreal 특징
ㄴ C++ 클래스를 삭제하려면 엔진을 끄고 파일 탐색기에서 삭제해야 한다.
ㄴ 컴포넌트들을 스마트포인터 멤버로 관리한다.
ㄴ 컴포넌트를 추가할 때 컴포넌트들 중 하나는 루트 컴포넌트여야 한다.
ㄴ 빌드는 Visual Studio에서 해도 되고 엔진의 컴파일 버튼을 눌러도 된다.
ㄴ 유니티와 비슷하게 멤버를 private으로 관리하고 리플렉션 기능을 활용하여 엔진에서 수정할 수 있다.
ex) UPROPERTY(VisibleAnywhere) UPROPERTY(EditAnywhere, Category=BattleStat)
로그와 디버깅
로그
UE_LOG(카테고리, 로그 수준, 형식, 인자)
UE_LOG(LogTemp, Warning, TEXT("hello %d"), 3);
카테고리별로 로그를 볼 수 있다.
디버깅
엔진 끄고 솔루션 구성 Development editor나 debuggame editor로 설정 후 디버깅 시작하면 엔진이 켜짐
엔진의 플레이 버튼 누르면 중단점에 걸림
솔루션 구성의 Debug와 Development는 debug와 release의 관계와 비슷하다.
editor와 editor가 안붙은 것의 차이
ㄴ editor 붙은 건 dll을 만들고 안 붙은건 exe를 만든다.
게임플레이 프레임워크
GameModeBase 클래스
ㄴ 게임의 규칙을 정의하는 클래스
월드 세팅
ctrl + n 단축키로 map을 생성할 수 있다.
ㄴ 세팅 -> 프로젝트 세팅 -> 맵&모드 -> 기본 맵 세팅
Pawn 클래스 (입력을 받을 수 있는 객체)
축과 액션에 대한 정보 세팅
ㄴ 세팅 -> 프로젝트 세팅 -> 엔진-입력 -> 축 매핑 이름 맞춰주기
Character 클래스
카메라가 캐릭터를 3인칭 시점으로 보이게 하기
ㄴ SpringArm은 CapsuleComponent에 붙인다.
ㄴ Camera는 SpringArm에 붙인다.
BluePrint
C++만을 사용하여 게임을 만들 수도 있지만 C++와 BluePrint를 적절히 섞어 사용하여 게임을 만들 수도 있다.
컴포넌트를 붙이거나 규칙을 정하는 과정을 시각화하여 표현한 것이다.
블루프린트 클래스가 C++ 클래스에 비해 느리긴 해도 유용하게 사용될 수 있다. 외형을 둘러볼 수도 있고 속성을 에디터에서 변경하여 적용해 볼 수도 있다.
기존에 만들어져 있는 C++ 클래스를 상속받는 블루프린트 클래스를 만들 수도 있다.