[unrealengine4_C++]

[C++] 프로젝트 생성 / 클라스 추가 및 삭제 / Root Component추가

롤링페이퍼 2023. 9. 11. 04:41

언리얼 C++ 프로젝트 알아보기

새 프로젝트를 만들어준다, C++ 프로젝트로 생성할 것이다.

*새 프로젝트를 생성 시 경로나 이름에 한글이 포함이 되지 않도록 한다.

새 프로젝트 - 게임 - 기본 - C++ 프로젝트 설정

※프로젝트 생성 오류 발생

만약 프로젝트 생성 시 아래와 같이 오류 발생 메시지가 뜨면서. NET Framework SDK 설치를 하라고 한다면

dotnet.microsoft 페이지로 가서. Net Framework에서 4.6.0 이상의 버전 아무거나 설치해 주면 된다.

 

https://dotnet.microsoft.com 홈페이지로 가서 원하는 버전의 개발자 팩을 다운받는다.

 

 

Visual Studio 버전 설정하기

프로젝트가 생성이 됐다면 VisualStudio와 언리얼 에디터 2개가 같이 실행된 것을 볼 수 있다.

만약에 본인이 VisualStudio사용하는 버전을 바꾸고 싶다면 '언리얼 에디터 편집 - 에디터 개인설정 - 일반 / 소스 코드' 탭에서 소스 코드 에디터를 원하는 VS 버전으로 선택하고 재시작하면 된다.

필자는 VisualStudio2019 버전을 사용한다

 

언리얼 에디터에서 VS를 열고 싶다면, 파일 - Visual Studio 2019 열기 탭을 통해서 열 수 있다.

* 만약 이미 만들어진 VS 프로젝트의 버전을 바꿔주고 싶다면, 솔루션 파일을 원하는 VS버전 연결프로그램으로 실행한다.

  그 후, 프로젝트(UE4, GPC_CPP_12) 우클릭 - 프로젝트 대상 변경 - 확인을 눌러주면 된다.

 


VS의 설루션 탐색기를 보면 UE4와 '본인 프로젝트 파일 이름'인 2개의 프로젝트가 만들어져 있다.

UE4 프로젝트는 언리얼 엔진에 관한 것들이 들어있으며

앞으로 우리가 C++를 배우면서 생성할 곳은 '본인 프로젝트 파일 이름'인 프로젝트에서 코드를 추가하며 사용할 것이다.

 

언리얼 에디터에서 C++ 클래스 만들기

 

C++ 프로젝트 폴더에서 우클릭 후 C++클래스를 클릭한다.

Actor로 생성 후 Cube로 이름을 지어준다

 

이후 VS에서 감지 문구가 나올 텐데 다시 로드를 눌러주면 ource에 Cube.h / Cube.cpp가 추가된 것을 확인할 수 있다.

언리얼 에디터에서 클래스를 생성해 주는 이유는, VS에서 클래스를 만들 때와 다르게 자동으로 코드가 입력되어 있기 때문이다.

 


본격적으로 VS에서 클래스 코드 살펴보기

 

Cube.h

만들어진 Cube.h를 보면 자동완성으로 코드가 적혀있는 것 을 확인할 수 있다.

class안에는 기본으로 ACube(), BeginPlay(), Tick()이 기본으로 있다.

 

- ACube() 생성자 : 이 actor의 속성들에 대해서 기본값을 설정

- BeginPlay() : 게임이 시작되거나 대상이 spawn 시, 호출

- Tick() : 매 프레임마다 호출

 

코드 맨 윗줄에 있는 // Fill out your copyright notice in the Description page of Project Settings. 주석은, 새 클래스를 만들 때마다 자동으로 자적권 고지가 입력되는 것이다.

 

이는 언리얼 에디터에서 프로젝트 세팅 - 프로젝트 / 설명 - 법률 / 저작권 고지에 입력된 내용이다.

 

편집 - 프로젝트 세팅 - 프로젝트 / 설명 - 법률 / 저작권 고지


- CoreMinimal.h : 최소한의 코어들이 들어있는 내용이다. 항상 헤더파일에 포함하는 것이 권장됨

- GameFramework/Actor.h : Actor를 상속받아 만든 클래스이므로 Actor.h를 포함

- Cube.generated.h : 언리얼에서 자동으로 완성시켜 준 코드

 

우리가 클래스 이름을 Cube라고 했지만 VS에서 보면 ACube처럼 접두어가 붙어있는 것을 볼 수 있다.

이는 언리얼에서 사용하는 접두어들 중 하나이다.

- F : 구조체, 델리게이트 등등

- U : Object를 상속받은 형식

- A : Actor를 상속받은 형식(똑같이 Object 상속이긴 하지만 Actor부터는 따로 A라고 표기함)

- T : Template(템플릿)

 


언리얼 에디터에서 생성한 클래스 삭제 및 수정하기

 

언리얼 에디터에서 클래스를 생성 후, 삭제 및 수정이 되지 않는 것을 볼 수 있다.

그래서 VS에서 먼저 지워줄 것이다.

1. VS의 설루션 탐색기에서 지우고자 하는 클래스를 지움

2. 실제 디렉터리 경로에 가서 남아있는 클래스를 지움


이제 프로젝트를 한번 빌드를 해주어야 언리얼 에디터에 삭제된 내용이 반영이 된다.

두 가지의 프로젝트 빌드 방법이 있다. (만약 빌드해도 삭제한 내용이 반영이 안됬다면 프로젝트 재부팅하기)

1. VS에서 Ctrl + B / Ctrl + Shift + B를 통해 빌드(빌드 중단을 원하면 Ctrl + Break)

2. 언리얼 에디터에서 컴파일(큐브모양) 누르기


파일 이름 바꿔보기

Class이름이 기니 줄여볼 겸 이름을 바꿔보자.

GPC_MY_StUDY_01GameModeBase.h

class의 GPC_MY_StUDY_01 GameModeBase에서 GPCGameModeBase로 바꿀 것이다.

그리고 include의 "GPC_MY_StUDY_01 GameModeBase.generated.h"도 마찬가지로 "GPCGameModeBase.generated.h"로 수정할 것이다.

 

※ 프로젝트 이름은 20자 이하여야 하고 class이름은 32자 이하여야 한다.

 

GPC_MY_StUDY_01GameModeBase.cpp

추가로 GPC_MY_StUDY_01 GameModeBase.cpp의 include의 파일이름 명도 GPCGameModeBase.h로 수정해 준다.

 

마지막으로 설루션 탐색기에 있는 파일명 이름도 위와 동일하게 바꿔준다.


클래스 다뤄보기

원래 블루프린트에서 Actor를 만든다면 기본으로 DefaultSceenRoot 컴포넌트를 가지고 있는 것을 볼 수 있다.

이는 Actor가 Transform, Scale, Rotation을 Root 컴포넌트가 가지고 있어야 하기 때문이다.

 

하지만 C++ 클래스로 생성한 Actor를 레벨로 올려보면 SceenRoot가 존재하지 않아 볼 수가 없다.

따라서 VS에서 따로 추가해주어야만 한다.

 

Cube.h

ACube 클래스 안에 StaticMesh 컴포넌트를 추가해 줄 것이다.

UStaticMeshComponent* Mesh;를 추가해 준다.

 

대부분 다 앞에 U 접두어를 붙여주면 되고, *를 통해 포인터로 만들어주어야 한다.

이후 빌드하여도 아직 컴포넌트가 만들어지지 않는다. 아직 주소를 주지 않았기 때문이다.

 

Cube.cpp

따라서 ACube() 생성자에서 Mesh에 UStaticMeshComponent를 넣어준다. 이어서 빌드를 해주면 된다.

이제 언리얼 에디터에서 Cube를 보면 Cube라는 Static Mesh Component가 만들어진 것을 볼 수 있다.