내일배움캠프 35일차 - 언리얼 엔진 C++: Actor 클래스에 컴포넌트 추가하기

액터의 구조

(1) #pragma once: 이 헤더는 단 한번만 호출된다. (중복호출 방지)
(2) CoreMinimal.h: 언리얼엔진에서 제공하는 기본타입, 함수 등을 포함하는 헤더파일
(3) GameFramework/Actor.h: 기본(부모)클래스 액터의 헤더
(4) 리플렉션 시스템: 클래스를 포함한 코드들을 블루프린트에서 볼 수 있게 하는 코드
(5) [MODULE_NAME]_API: 이 클래스를 모듈 밖에서 사용하게 하는 매크로
  : 모듈이란 Source폴더 혹은 Plugin폴더에서 [ModuleName].Build.cs 라는 파일을 가진 폴더를 칭한다.

(6) 접두어A가 붙은 클래스: 언리얼차원에서 Actor계열 클래스임을 나타내는 접두어
  : 언리얼에서는 클래스 이름 앞에 접두어를 붙이는 것을 권장한다.
  : 오브젝트의 경우 U (ex: UObject)
  : 액터의 경우 A (ex: AActor)
  : 구조체의 경우 F (ex: FStruct)
  : Enum의 경우 E (ex: EState)

(7) 생성자
(8) BeginPlay(): 스폰 시 실행되는 액터 라이프사이클 함수
(9) Tick(): 매 프레임마다 실행되는 함수


컴포넌트

액터에 붙는 부속 오브젝트. 블루프린트에서는 '추가'버튼을 통해 컴포넌트를 추가할 수 있다.

블루프린트에서의 스태틱 메시 컴포넌트의 메시/머티리얼 을 할당하는 방법


위의 컴포넌트 추가 방법을 C++의 방식으로 적용시켜보자.

h파일에서 생성할 컴포넌트들을 변수로 정의한다.

USceneComponent*: 씬 컴포넌트 변수.
UStaticMeshComponent*: 스태틱메시 컴포넌트 변수, 스태틱메시가 들어갈 자리.

cpp파일의 생성자에서 작성한다.

(1) CreateDefaultSubobject<컴포넌트타입>(컴포넌트명): 입력된 오브젝트타입을 만들고 반환.
      SetRootComponent(컴포넌트변수): 지정한 컴포넌트를 Root로 만든다.

자동완성 기능을 적극적으로 사용해보자.

(2) 컴포넌트변수->SetupAttachment(컴포넌트변수): 지정한 컴포넌트의 자손이 된다.

(3) static ConstructorHelpers::FObjectFinder<오브젝트타입> 변수명
       
: 입력된 오브젝트타입 에셋의 경로를 저장하는 변수를 선언한다.

(4) 에셋변수.Succeeded(): 해당 에셋이 성공적으로 불러왔는가bool타입으로 반환.
      컴포넌트변수->SetStaticMesh(에셋변수.Object): 컴포넌트에 해당 스태틱 메시를 적용.

에셋의 경로우클릭→레퍼런스 복사를 통해 손쉽게 복사가 가능하다.

(5) 3번과 동일

(6) 컴포넌트변수->SetMaterial(번호, 에셋변수.Object): 이 메시의 지정 번호에 머티리얼을 적용.


C++ 액터클래스에 메시/머티리얼이 성공적으로 배치된 모습.

댓글