언리얼엔진/언리얼 C++

C++ 기반 프로젝트 만들기와 계층구조, 코딩규약

season97 2023. 10. 12. 20:50

▶ 들어가기에 앞서 C++ 기반 프로젝트 만들기

 

블루프린트 기반의 프로젝트에 그냥 C++클래스를 붙히면 오류가 발생할 확률이 매우 높다고 한다..

 

ㆍ 기반 프로젝트를 c++로 만들어야 하는데 이 과정에서도 오류가 정말 많이 발생해서 골치가 아팠다.

 

ㆍ프로젝트가 안만들어진다면 우선 Visual Studio 2022버전을 다운받아줘야 한다.

 

필수 추가 프레임워크
C++을 이용한 데스크톱 개발에서 추가 옵션 선택

※ 출처 :https://docs.unrealengine.com/5.1/ko/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/

 

ㆍ 위 사진과 같이 필요한 것들을 체크해줘서 2022버전을 설치해 주자

 

ㆍ 또한 프로젝트를 만드는 경로에 "절대" 한글경로가 들어가서는 안된다.

 

ㆍ User이름 조차 한글이 들어가서는 안되는 것 같다... 이것때문에 시간 엄청 잡아먹었다.

 

▶ 이럼에도 불구하고 언리얼 CPP 프로젝트에 문제가 생기면?

 

ㆍ 파일탐색기를 타고 들어가서 프로젝트 경로를 확인해 보자

선택된 5개 폴더 삭제

ㆍ 위 선택된 5개 폴더를 삭제 한 후

 

3번째 선택

ㆍ 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를 사용한다

 

 

'언리얼엔진 > 언리얼 C++' 카테고리의 다른 글

Actor  (0) 2024.10.11
머태리얼  (0) 2024.10.10
UObject  (0) 2024.10.10
언리얼C++ 여러가지 기본팁  (2) 2024.10.09
애니메이션  (1) 2023.10.13