안녕하세요. 어소트락 게임아카데미 입니다.
이번 내용은 C++ 프로젝트가 어떻게 구성되어 있는지를 살펴보고 C++ 클래스 생성을 통한 액터 생성, 생성된 액터에 원하는 메쉬를 지정하여 출력하는 방법에 대해 알아보도록 하겠습니다.
지난 글을 따라서 프로젝트를 생성하셨으면 아래 이미지와 같이 언리얼엔진 에디터가 화면에 보여지고 있을 것입니다.
콘텐츠 브라우저의 파란색 네모를 누르시면 현재 화면과 같은 창으로 나오게 되고 C++ 클래스를 누르시면 생성하신 프로젝트 이름과 동일한 폴더가 있습니다. 해당 폴더 안에 C++ 클래스를 생성하시면 됩니다.
위의 그림처럼 마우스 우클릭을 하면 메뉴가 나오고 새 C++ 클래스를 선택하시면 상속받을 클래스를 선택하는 화면이 나옵니다.
위의 그림처럼 Actor를 선택합니다. Actor는 설명에 보이는 것처럼 월드에 배치 또는 스폰할 수 있는 오브젝트입니다. Pawn이나 Character도 이 Actor를 이용해서 월드에 배치할 수 있는 기능을 상속받아 사용하고 Pawn이나 Character만의 고유한 기능들을 사용하고 있습니다.
다음을 선택하시면 아래와 같이 클래스 이름을 결정하고 경로를 지정해줄 수 있는 창이 나오는데 전 MyActor로 그대로 생성하도록 하겠습니다.
다음을 눌러서 클래스를 생성하고 나면 아래와 같이 콘텐츠 브라우저의 C++ 프로젝트 폴더 안에 MyActor라는 것이 생성이 되어 있습니다.
화면과 같이 원하는 이름으로 Actor가 생성되어 있고 Visual Studio가 함께 열려 있을 것입니다.
Visual Studio 에는 Engine필터, Enterprise필터, Games필터, Visualizers필터 4개의 필터가 있고 Engine 필터에는 UE4라는 프로젝트가 있습니다. 이 프로젝트가 바로 언리얼엔진의 코드 부분이고 실제 이 프로젝트를 열어서 언리얼엔진의 코드를 볼 수 있습니다.
다음으로 봐야 할 필터는 Games 필터입니다. 이 필터에는 실제 우리가 게임을 개발할때 만든 클래스들이 들어오는 프로젝트가 있고 이 프로젝트 안에 있는 코드를 작성하여 게임 내에 배치될 Actor나 Pawn에 대한 코드를 작성할 수 있습니다.
Visual Studio 화면을 보시면 아래와 같은 화면을 보실 수 있습니다. 제가 사용하는 Visual Studio 버전은 2015 버전을 사용하고 있고 2017 버전을 사용하셔도 똑같은 결과를 볼 수 있습니다.
MyActor 앞에 A가 접두어로 붙어 있는데 A가 접두어로 붙을 경우 Actor 클래스를 의미합니다.
언리얼엔진에서 클래스 접두어는 중요한 역할을 하고 있습니다. 클래스 접두어는 크게 2가지로 나뉩니다. U와 A 입니다.
A는 Actor를 의미하고 U는 액터가 아닌 다른 클래스로 활용이 되고 있습니다.
클래스 선언 위에 보면 UCLASS() 라는 매크로를 볼 수 있는데 이는 언리얼엔진에서 제공받은 클래스를 상속받아 만들게 되면 반드시 붙게 되는 매크로 입니다. 언리얼 엔진은 엔진에서 사용하는 클래스들의 메모리를 엔진 안에서 관리를 하고 있습니다. 엔진안에서 관리하는 메모리는 사용자인 프로그래머가 직접 관리할 일이 없어지기 때문에 메모리 릭에 대해 비교적 자유롭게 프로그래밍을 할 수 있는 장점이 있습니다. 하지만 프로그래머가 직접 new키워드를 이용하여 동적할당을 하고 사용하는 부분까지는 관리가 안되기 때문에 그런 메모리들에 대해서는 반드시 해제를 해주어야 합니다.
A나 U가 붙고 UCLASS 매크로를 이용하여 언리얼 클래스로 사용하는 클래스들은 메모리 관리를 안해도 되기 때문에 편하게 사용할 수 있습니다.
클래스 내부에는 GENERATED_BODY() 매크로를 이용해 언리얼엔진에서 기본으로 사용하는 클래스 양식을 만들어줄 수 있게 만들어져 있습니다. 여기까지가 반드시 클래스 구성을 위해서 들어가야 하는 필수 요소들이고 AActor를 상속받아 만들어져있기 때문에 AActor에서 제공하는 여러가지 가상함수들을 재정의하여 사용할 수 있습니다.
화면에 보이는 BeginPlay 함수는 게임이 시작되고 액터가 게임에 입장할때 호출되는 함수입니다.
Tick 함수는 매 프레임마다 호출되는 함수이고 인자로 들어오는 float타입의 DeltaTime은 이전프레임으로부터 현재프레임이 진행될때까지의 시간을 나타내는 값을 의미합니다. 이 DeltaTime값을 이용하여 속도 같은 것들을 시간으로 컨트롤 할 수 있는 기능을 제공하는 것입니다.
예를 들어 초당 이동속도가 10이라면 이 10이라는 값을 DeltaTime을 매번 곱하여 사용을 하게 될 경우 1초가 흐르게 되었다면 총 이동속도는 10이 나오는 방식으로 사용을 하게 되는데 자세한 내용은 추후에 액터를 이동하는 기능을 활용할때 다시 한번 설명드리도록 하겠습니다.
사실 지금은 단순히 액터를 생성만 했을뿐 아무런 기능도 할 수 없습니다. 액터를 이용해서 화면에 무언가 출력을 하고 싶다면 에셋이 필요합니다. 언리얼 엔진에서는 마켓플레이스에서 다양한 무료 에셋을 제공해주고 있는데 이러한 에셋중 하나를 다운로드 받아 사용하도록 하겠습니다.
엔진의 런처를 열어보시면 윗부분에 마켓플레이스 라는 탭이 있는데 이 탭을 눌러보도록 하겠습니다.
위와 같은 마켓플레이스 화면을 볼 수 있는데요. 여기에서 무료 탭을 눌러보시면 무료로 제공하는 다양한 에셋을 볼 수 있습니다.
파라곤 에셋들은 퀄리티가 정말 높죠 ^^
무료탭에서 찾다보면 Infinity Blade:Grass Lands, Infinity Blade:Ice Lands, Soul Cave 등 다양한 환경 관련 에셋들이 있는데 저희는 Infinity Blade:Grass Lands 에셋을 활용해서 해보도록 하겠습니다.
해당 에셋을 누르면 세부사항이 나오는데 오른편에 에셋을 다운받을 수 있는 버튼이 있고 끝나고 난 뒤 프로젝트에 추가 버튼이 나오게 되는데 프로젝트에 추가 버튼을 누르고 저희가 만든 프로젝트를 선택하여 추가를 하면 됩니다.
에셋이 추가되면 아래와 같은 화면을 볼 수 있습니다.
콘텐츠 브라우저에 에셋들이 다운로드 받아져 있는것을 확인해볼 수 있고 완성된 맵을 구경해보고 싶다면 Maps 폴더에 ElvenRuins를 더블클릭 해보시면 완성된 맵을 볼 수 있습니다. 에셋에서 제공하는 세부 에셋들을 이용하여 꾸민 완성된 화면을 미리 만들어 둔 것이죠.
만약 Level을 저장하지 않았다면 현재 진행하고 있는 레벨을 저장할 것인지를 묻는 창이 나올 것입니다.
이 경우 선택저장을 눌러서 저장을 해두시면 됩니다.
저는 Level1 이라는 이름으로 저장을 해두었습니다. 완성된 화면은 우클릭을 한 후에 w, s, a, d 키를 이용하여 카메라를 움직여서 볼 수 있습니다. 툴바의 플레이 버튼을 누른 후에 보셔도 됩니다.
다 보셨으면 다시 원래의 화면으로 돌아가기 위해 저장해둔 레벨을 열도록 하겠습니다. 그대로 저장을 하셨다면 콘텐츠 폴더에 레벨이 만들어져 있을 것입니다. 저장을 안하셨다면 Ctrl + N 을 이용해서 Default 레벨을 새로 만들어주시면 됩니다.
여기까지 액터의 생성에 대해 알아보았습니다.
다음에는 액터에 추가할 수 있는 Component에 대해 알아보고 다운로드 받은 에셋을 활용하여 액터를 이용해서 출력하는 방법에 대해 알아보도록 하겠습니다.
감사합니다.
문의전화
02. 598. 9457
카카오톡 오픈채팅 무료상담
https://open.kakao.com/o/sVEspGE
유튜브 무료강의
'정보 & 소식 > Unreal Engine' 카테고리의 다른 글
언리얼 공인 트레이닝 파트너프로그램을 소개합니다. (0) | 2021.01.24 |
---|---|
언리얼엔진4 버추얼프로덕션을 이용한 2020 크로스파이어 세계대회 참여 어소트락게임아카데미 (0) | 2021.01.06 |
언리얼엔진4 C++ 코드를 이용한 메쉬 로딩 (0) | 2018.12.17 |
언리얼엔진4 Component, StaticMesh 에셋 설정과 UPROPERTY매크로 활용 (0) | 2018.12.14 |
언리얼엔진 C++ 프로젝트 생성 및 각 프로젝트 폴더들의 의미 (0) | 2018.12.10 |