유니티 프로젝트에 이어서 처음으로 언리얼을 공부를 시작했다.
본 내용은 인프런의 이득우의 언리얼 엔진 강의를 참고했으며 내용을 포함하고 있다.
프로젝트 세팅
강의에서는 5.1.1 버전을 사용했지만 필자는 5.4버전으로 할 예정이다. 그 이유는 .Net 6.0.0 버전이 언리얼 5.1.1에는 필요한 것 같은데 5.4 버전은 .Net 8.0이 필요하다. 이는 이미 설치가 되어있기에 5.4 버전으로 진행한다.
언리얼 엔진을 사용할 때 코드 편집기는 VS만 꼭 사용해야하는 건 아니다. Rider 와 같은 다른 툴을 사용해도 무방하다. 다문 디버그 최적화 같은 경우 VS가 잘 되어있으니(VS Assist도 있고) VS 2022 버전으로 진행한다.
언리얼은 에픽게임즈를 통해 설치할 수 있다. 설치를 한 후 빈 프로젝트를 C++로 만들어보자.
놀랍게도 시작과 동시에 에러와 마주쳤다. (유니티가 그립다.)
진짜 별의별 방법으로 시도했지만, 계속해서 컴파일에 실패했다.
몇 시간 땅에 헤딩한 결과
두가지의 문제가 있었다.
1. 프로젝트 경로에는 한글이 있으면 안될 것.
필자는 경로에 "바탕 화면" 이라는 글자가 있어서 문제가 발생했다. 이것은 바탕화면 속성에 들어가 Desktop으로 수정하면 된다.
2. VS 버전 오류
사용하고자 하는 VS는 놀랍게도 가장 최신 버전이었다. 다른 포럼을 찾아봐도 프로젝트를 생성할 때 컴파일 에러가 난다면 VS를 최신 버전으로 업데이트 하라고 적혀있고, 대부분의 사람들이 그렇게 문제를 해결했다고 한다.
그러나 VS 2022 17.12 버전은 아직 언리얼에서 충돌이 나는 것같다. VS를 17.10 버전으로 롤백하니 정상적으로 작동했다.
로그 찍기
언리얼에서 클래스를 생성하는 건 다음과 같이 할 수 있다.
Tools -> New C++ Class...
여기서 Common Classes는 컨텐츠 제작에 필요한 클래스들을 미리 묶어서 보여주는 것 뿐 All Classes에서 검색해서 찾는 것과 동일하다.
언리얼 엔진은 짜여진 틀 안에서 사용자가 추가로 제작하는 느낌이고 유니티는 처음부터 공사를 해나가야 하는 느낌이다. GameInstance를 상속받은 나만의 GameInstance를 생성해주겠다.
GameInstacne는 언리얼에서 여러 레벨이나 게임 모드에서 공유해야하는 영구 데이터를 관리하는 클래스로 사용된다. 이 클래스는 게임 시작시 생성되며 게임이 종료될 때 까지 유지된다. 싱글톤 같은 느낌이다.
이제 코딩을 하려고 헤더를 고치는 순간 빌드가 안되는 모습을 볼 수 있다.
언리얼 엔진에서 코드를 컴파일 하는 것은 그다지 쉽지가 않다.
소스 코드가 방대하고 언리얼 만의 규칙이 매우 까다롭기 때문이다.
그래서 2가지의 방식을 사용한다.
1. 헤더가 변경될 경우 => 설계가 변경되어 헤더를 수정하게 되었다면 에디터를 끄고 VS만 킨 상태에서 빌드를 한다.
2. 소스 파일만 변경될 경우 => 언리얼에서 제공하는 라이브 코딩으로 컴파일 한다. Ctrl-Alt-F11 단축키를 사용.
참고로 VS에서 Ctrl-F5를 눌러 빌드 없이 실행하면 자동으로 언리얼이 켜진다.
이제 실제로 Init 함수를 구현해보자.
이미 존재하는 GameInstacne의 Init을 Override해서 로그를 찍어보자.
여기서 주의 해야하는 점은 Override 할 때 꼭!!!! 부모의 가상함수를 호출해줘야만 한다. 이를 하지 않으면 제대로 초기화가 되지 않을 수도 있다.
void UMyGameInstance::Init()
{
// 언리얼 자체가 컴파일하면서 자체적으로 클래스의 종속을 알 수 있기 때문에, (define한 매크로 덕분)
// 그렇기에 Super만 써도 알아먹는다.
Super::Init();
// 유니코드를 잘 처리할 수 있도록 매크로를 사용하는데, 이게 바로 TEXT
// 일반적으로 코딩을 진행할 때, TEXT로 문자열을 처리하는 것이 좋다.
// LogTemp 소속에 Log 항목으로 찍을 것이라는 의미
UE_LOG(LogTemp, Log, TEXT("%s"), TEXT("Hello Unreal"));
}
이제 코드는 전부 작성했고 이를 기존의 GameInstance와 교체해 주어야한다.
맨 밑에 GameInstance를 바꿔주면 된다.
실행하면 결과가 제대로 나오는 모습을 볼 수 있다.
'Unreal Engine 5 > 강의' 카테고리의 다른 글
[UE5] 언리얼 컨테이너 라이브러리 - Struct와 TMap, 언리얼 메모리 관리 (0) | 2024.11.25 |
---|---|
[UE5] 언리얼 컨테이너 라이브러리 - TArray, TSet (0) | 2024.11.22 |
[UE5] 언리얼 C++ 설계 - 인터페이스, 컴포지션, 델리게이트 (0) | 2024.11.21 |
[UE5] 언리얼 오브젝트의 이해 - 리플렉션 시스템 (3) | 2024.11.20 |
[UE5] 언리얼 오브젝트의 이해 - 코딩 표준, 기본 타입과 문자열, 언리얼 오브젝트란? (0) | 2024.11.19 |