▶ 들어가기에 앞서 C++ 기반 프로젝트 만들기
ㆍ 블루프린트 기반의 프로젝트에 그냥 C++클래스를 붙히면 오류가 발생할 확률이 매우 높다고 한다..
ㆍ 기반 프로젝트를 c++로 만들어야 하는데 이 과정에서도 오류가 정말 많이 발생해서 골치가 아팠다.
ㆍ프로젝트가 안만들어진다면 우선 Visual Studio 2022버전을 다운받아줘야 한다.
ㆍ 위 사진과 같이 필요한 것들을 체크해줘서 2022버전을 설치해 주자
ㆍ 또한 프로젝트를 만드는 경로에 "절대" 한글경로가 들어가서는 안된다.
ㆍ User이름 조차 한글이 들어가서는 안되는 것 같다... 이것때문에 시간 엄청 잡아먹었다.
▶ 이럼에도 불구하고 언리얼 CPP 프로젝트에 문제가 생기면?
ㆍ 파일탐색기를 타고 들어가서 프로젝트 경로를 확인해 보자
ㆍ 위 선택된 5개 폴더를 삭제 한 후
ㆍ uproject 파일을 우클릭해 3번째 옵션을 선택해주면 다시 빌드가 된다.
※TIP : 만약 다 정상적으로 실행이 돼서 프로잭트 안에 있는 cpp를열었는데 오류가 많이 들어온다면?
→ 프로젝트를 전부 종료해준 후 파일경로에 있는 .sln 파일을 실행시켜 솔루션을 다시 빌드해보자.
→ 만약 정상적으로 빌드가 된다면 오류가 들어와도 상관없다. 아마 언리얼의 라이브코딩 시스템과 visual studio가 충돌이 나서 발생하는 오류인 것 같다.
ㆍ C++을 편하게 사용하기 위해선 위 플러그인을 반드시 설치해 줘야할 것 같다.
ㆍ 설치하고 나면 코드에 색이 들어오며 자동완성기능이 활성화 된다.
ㆍ 2022를 설치해준 이유다. 2022버전에서만 지원한다.
▶ 언리얼 엔진의 계층구조
ㆍ 모든 언리얼 오브젝트는 UObjectBase 클래스를 상속받는 구조로 되어있다
ㆍ 어떠한 방식으로든 엔진과 상호작용하는 모든 오브젝트는 일반적으로 UObject 타입을 통해 처리를 해야 한다.
ㆍ 언레얼 엔진의 가비지컬렉션과 같은 기능을 사용하기 위해서는 반드시 상속이 이루어져야 한다.
ㆍ 직접적으로 받든, 간접적으로 받든
▶ 계층도 클래스 설명
1. UObjectBase
ㆍ 모든 오브젝트가 상속받는 UObject의 베이스 클래스
ㆍ 일반적으로 오브젝트라면 필요로 하는 기본적인 기능들이 정의되어 있다.
2. UObjectBaseUtility
ㆍ UObject에 대한 유틸리티 함수 지원
ㆍ 메타데이터 : 함수를 사용하는데 있어 가상화된 함수테이블
→ 예를들어 begin에 대한 메타데이터 함수
3. UObject
ㆍ 모든 오브젝트의 베이스 클래스
ㆍ 언리얼에서 지원하는 오브젝트는 이 클래스를 상속받아야 한다.
4. AActor
ㆍ 레벨에 배치 또는 스폰할 수 있는 오브젝트의 베이스 클래스
ㆍ 크게 트랜스폼, 랜더 프로세스를 조종하는 컴포넌트에 초점이 맞추어져 있다.
ㆍ 뷰포트에 올릴 수 있는 최소단위로 이 아래부턴 뷰포트에 올릴 수 있다.
5. APawn
ㆍ 컨트롤러나 AI가 빙의해 컨트롤 할 수 있는 모든 액터의 베이스 클래스
ㆍ 다양한 입력함수가 존재하고 이는 대부분 Pawn이라는 클래스에 커스텀 되어있다.
6. ACharacter
ㆍ 폰과 비슷하지만 메시, 콜리전, 이동로직을 기본적으로 포함하는 객체다.
ㆍ 대부분의 월드에서 상호작용을 담당한다.
▶ 코딩규약
ㆍ 엔진을 만든 에픽게임즈의 코딩 규약을 알고있는게 언리얼 엔진을 빠르게 이해하는 가장 좋은 방법인 것 같다.
※ 출처: https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/
ㆍ정리해보자
1. F 접두사
ㆍ 언리얼 오브젝트와 관련 없는 일반 C++클래스나 구조체를 의미함
ㆍ 예를들어 수학에 관련된 것들은 F접두사가 붙는다 FVector 등등..
2. U 접두사
ㆍ UObject의 파생 클래스
3. A 접두사
ㆍ Actor의 파생 클래스
4. S 접두사
ㆍ SWidget에 상속하는 클래스
ㆍ UI 프레임워크에서 가장 기본적인 위젯 클래스
ㆍ C++기반 UI 생성 도구로 모든 슬레이트 위젯의 베이스 클래스다.
ㆍ 다양한 이벤트처리 함수와 위젯 특성 설정함수를 제공한다.
ㆍ 이를 상속하여 커스텀 위젯을 만들 수 있다.
ㆍ 예를들어 SButton, SText, SImage 등등
ㆍ 하지만 개발하는데 있어 블루프린트와 UMG시스템을 통해 UI를 구성하는것이 보다 쉽고 직관적이다
ㆍ 슬레이트는 주로 에디터확장(권장하지않음) 또는 고급 UI커스터마이징에 사용된다.
5. I 접두사
ㆍ 추상 인터페이스 클래스
ㆍ 단순 인터페이스가 아니라 함수나 기능에 대한 생태계를 생각해야 한다.
ㆍ 예를들어 액터는 어떠한 공정을 거쳐 흰색으로 화면에 그려진다.
→ 그렇다면 효율적으로 빨간색으로 그려지게 하고싶다면 어떻게 하는게 좋을까?
→ 어떠한 공정을 거치는 작업을 하기 전에 빨간색으로 바꾸고 공정을 거치는것이 효율적이겠다.
즉 인프라를 생각해야함
6. E 접두사
ㆍ 열거형
7. B 접두사
ㆍ Bool형
8. Typedef 접두사
ㆍ 재정의가 필요한 유형 보통 구조체는 F , UObject는 U를 사용한다