Unreal 엔진

[이득우의 언리얼 C++] 챕터2 액터의 설계

원생계 2019. 11. 19. 18:09

.

월드가 제공하는 필수 요소.

공간, 시간, 물리, 렌더링

그 외의 다양한 기능들은 툴바의 세팅 > 월드 세팅

액터의 구성 요소

이름, 유형, 트랜스폼

프로퍼티, 게임 로직 (C++, 블루프린트)

컴포넌트

액터의 주요 기능 세 가지.

시각적 기능, 물리적 기능, 움직임

액터를 설계할 때 컴포넌트를 조합. 액터는 여러 개의 컴포넌트를 가질 수 있음. 그 중 대표 컴포넌트를 반드시 지정해야 함. (루트 컴포넌트)

주요 컴포넌트

스태틱메시 컴포넌트

스켈레탈메시 ,,

콜리전 ,,

카메라 ,,

오디오 ,,

파티클 시스템 ,,

라이트 ,,

무브먼트 ,,

분수대 샘플.

액터가 두 개의 스태틱메시 컴포넌트를 가지려면 멤버 변수로 두 개의 UStaticMeshComponent 클래스의 포인터를 선언해줘야.

#include “CoreMinimal.h” 대신 #include “EngineMinimal.h” 파일로 변경.

언리얼 4.15부터 IWYU(Include What You Use)방식.

단, 예제에서는 엔진 클래스의 모든 선언을 모아둔 EngineMinimal.h 를 사용.

언리얼 오브젝트 멤버변수 위에 UPROPERTY() 선언해야 메모리 관리 됨.

비주얼 스튜디오에서 UPROPERTY 메크로 쓰고 엔터치면 들여쓰기가 됨. 확장 도구 설치로 해결.

http://bit.ly/ue4vstool

어떤 C++클래스가 언리얼 오브젝트 클래스가 되려면 클래스 선언에 엔진 규칙에 부합해야.

클래스 선언 매크로 : UCLASS() / GENERATED_BODY()

클래스 이름 접두사 : 언리얼 오브젝트는 규칙에 맞는 접두어. A는 액터 클래스에 사용. U는 액터가 아닌 클래스에 사용

generated.h 헤더 파일 : 컴파일 과정에 엔진이 생성하기 때문에 마지막 #include 구문에 헤더 선언 해야함.

외부 모듈에의 공개 여부 : DLL 에서 외부에 공개 여부를 _declspec(dllexport) 키워드를 제공. 언리얼 엔진에서 이 키워드 사용은 “모듈명_API” 키워드를 클래스 선언 앞에 추가. 이 키워드가 없으면 다른 모듈에서 객체에 접근 못함.

생성자 코드에서 컴포넌트 생성은 new가 아닌 CreateDefaultSubojbect() 함수 API로 생성.

Body = CreateDefaultSubobject<UStaticMeshComponent>(TEXT(“BODY”));

루트 컴포넌트 지정해줘야 함.

RootComponent = Body;

Water->SetupAttachment(Body);

핫리로드 동작으로 만들어진 새로운 모듈들은 언리얼 에디터를 완전히 종료하고 컴파일 수행 시 임시 모듈들은 자동으로 제거.

컴포넌트를 에디터에서 수정하려면 UPROPERTY( VisibleAnywhere ) 키워드 추가 필요.

단, 속성의 값을 수정하려면 UPROPERTY( EditAnywhere, Category=ID)

uint8, float, FString, FVector 등의 값 유형들.

FVector() 클래스 등의 F 접두사는 언리얼 오브젝트와 관련 없는 일반 C++클래스/구조체를 의미.

C++ 코드에서 애셋 불러오기

ContructorHelpers::FObjectFinder<TypeName> AssetObj(TEXT(“...AssetPath...”));

AssetPath = {오브젝트 타입}’{폴더명}/{파일명}.{애셋명}’

ex) StaticMesh’/Game/MyGame/GameMesh.GameMesh’

if (AssetObj.Succeeded())

{

Component->SetStaticMesh(AssetObj.Object);

}

애셋 결로 정보는 게임 실행 중 변경될 일이 없기 때문에 static 으로 생성해서 한 번만 초기화 하는 것이 바람직.

static ConstructorHelpers::FObjectFinder<UStaticMesh> SM_GAMEMESH(TEXT(“/Game/MyGame/GameMesh.GameMesh”));


역시 디테일한 설명들은 여러권을 봐야, 저자마다 집중하는 부분이 달라서 모르던 걸 알게되는 것 같습니다. 또 뭐 놓치는 게 있진 않을까 싶어서 다른 입문책도 보고싶어지네요.

https://wonsorang.tistory.com/609?category=850073

 

[책] 이득우의 언리얼 C++ 게임 개발의 정석, 프리뷰

. “이득우의 언리얼 C++ 게임 개발의 정석” 책 읽기 시작. 제목에도 C++ 이 들어있는 것처럼, C++ 프로그래머들을 위한 언리얼 책입니다. 이전에 읽었던 "예제로 배우는 언리얼 엔진4 게임 개발" 책..

wonsorang.tistory.com

.

.

.

728x90
반응형