시작
원래 part2강의를 먼저 수강하고 part1을 시작하려고 했지만,,
언리얼 특유의 환경 & 컴파일 방식
으로 인해
"역시 기초가 중요하지"
라는 생각으로 part1과 함께 cs, C++기반을 다지기로 했다.
환경 설정
Unreal Engine 5.1.0 버전 이상
Visual Studio 2022 버전
- 언어의 경우 모두 영어로
- Visual Studio → option → General → "Always show Error List if build finishes with errors" 끄기
- 초기에는 Debug/Release 이 부분이 굉장히 작아서 늘리는 과정
: Visual Studio → Debug/Release 우클릭 → Customize → Commands → Toolbar → Standard → Solution Configuration → Modify Selection : 200 - Visual Studio에서 줄정렬하기 위한 Extension
: 1. Visual Commander 다운 https://vlasovstudio.com/visual-commander/
2. ue4-vsextesion 다운 https://github.com/hackalyze/ue4-vs-extensions
3. Visual Studio → Extesions → VCmd → Import( ue4-vsextesion 2017-2019)
4. Visual Studio → Extesions → VCmd → UE4~ 체크
Unreal Engine 기본 설명
언리얼은 기본적인 프로그래밍 뼈대를 엔진 자체에서 구성한다.
(유니티때 처럼 내가 하나씩 오브젝트와 C#스크립트로 만드는 형식이 아니다.)
언리얼은 내가 직접 설계한 콘텐츠를 추가하는 형태로 코딩이 진행된다.
→ 즉, 원하는 기능에 적합한 클래스를 만들고 이걸 언리얼 뼈대에 적합하게 넣어서 구동하는 방식
"Hello Unreal!" 출력_클래스 생성
원하는 기능에 적합한 클래스를만들고 이걸 언리얼 뼈대에 적합하게 넣어서 구동하는 방식
원하는 기능 : 문자열 "Hello Unreal!" 출력
이에 적합한 클래스 : GameInstance
클래스조차 Visual Studio가 아닌 Unreal Engine에서 만들고 컴파일한다.
클래스 생성방법
1. Tool → New C++ Class
2. All Classes → GameInstance, MyGameInstance로 네이밍
Common Classes : 게임 개발에 필요한(GameModeBase,Character, Actor등) 클래스
3. 그 다음부턴 코딩+컴파일까지 완료되어서 Visual Studio가 뙇 뜬다.
"Hello Unreal!" 출력_언리얼 엔진 컴파일
언리얼 엔진에서는 코드 컴파일이 까다롭다.(자칫하면 삽질을 할지도)
따라서 앞으로 2가지 방법으로 컴파일을 할거다.
1. 헤더 변경이 지속될 경우 (설계를 계속 변경할 경우) → 엔진 에디터를 끄고 Visual Studio에서 컴파일
2. 소스파일만 변경될 경우 → 언리얼에서 제공하는 라이브 코딩으로 컴파일 (Ctrl+Alt+F11)
이번에는 MyGameInstance의 설계를 바꾸기 때문에 1번으로 실행
"Hello Unreal!" 출력_Init 함수, 문자열 구현
Unreal Engine이 제공하는 부모 클래스를 상속해서 가상함수를 오버라이딩(함수 재구현, 기능 추가) 하는 경우,
제공받은 클래스(여기선 Init())를 먼저 실행시켜야 한다.
이렇게 헤더에 Init() override를 선언하고,
Alt+Enter로 Init()의 definition을 만들어 주겠다고 설정할 수 있다.
그러면,
처럼 자동으로 C++ 코드파일에 작성해준다.
상위클래스의 가상함수인 Init()를 먼저 실행시켜야 한다.
void UMyGameInstance::Init()
{
// 언리얼 자체가 컴파일하면서 자체적으로 클래스의 종속을 알 수 있기 때문에,
// MyGameInstance라는 부모클래스를 명시적으로 알려주지않고 Super만 써도 알아서 실행한다.
Super::Init();
}
가상함수를 상속받아서 함수를 재구현하는 경우,
반드시 Super::함수; 작성하기
void UMyGameInstance::Init()
{
Super::Init();
// 언리얼엔진에서 로그를 남기기 위한 UE_LOG 매크로 함수를 사용한다.
// 유니코드를 잘 처리할 수 있도록 TEXT 매크로 함수를 사용한다.
// TEXT로 문자열을 처리하는 것이 좋다.
UE_LOG(LogTemp, Log, TEXT("%s"), TEXT("Hello Unreal"));
// UE_LOG(로그 카테고리(로그 분류), 로그 출력 수준(Log, Warning, Error), Format)
}
빌드 → 실행(F5) 를 하면 Unreal이 켜진다.
"Hello Unreal!" 출력_Unreal에 집어넣기
원하는 기능에 적합한 클래스를만들고 이걸 언리얼 뼈대에 적합하게 넣어서 구동하는 방식
언리얼 뼈대에 집어넣으려면 기존에 있던 그 무언가를 빼고 내가 만든 GameInstance 코드를 넣어야한다.
Edit → Project Settings → Maps&Modes → GameInstance → MayGameInstace로 교체
※ GameInstance: 콘텐츠(코드)를 담는 뼈대, 싱글톤의 형태로 단일 인스턴스로 관리약간 유일무이한 느낌
이후 재시작하면 Output Log에서 LogTemp에 만들어둔 함수 Hello Unreal을 볼 수 있다.
'하고싶은거 > Unreal' 카테고리의 다른 글
Part1 04. 언리얼 오브젝트 (0) | 2024.03.03 |
---|---|
Part1 03. 기존 C++과 다른 언리얼 C++ (0) | 2024.03.02 |
Part1 02. 언리얼C++ 코딩규칙 (2) | 2024.02.29 |
Part2 섹션1. 게임 콘텐츠의 기본 구조 (0) | 2024.02.13 |
이득우의 언리얼 프로그래밍 start (0) | 2024.02.11 |
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!