이득우의 언리얼 C++ 게임 개발의 정석을 읽고 개인 공부 목적으로 요약 정리한 글입니다@
월드 (World) : 게임 콘텐츠를 구동하기 위해 필요한 필수적인 환경
공간 (Space)
가상 세계를 구성하는 3차원의 영역
Transform 구조체 사용
기본 단위 : cm
시간 (Time)
가상 공간에서 흐르는 시간
시간의 스케일 조정 가능
단위 : 초, 현실과 동일
물리 (Physics)
월드 공간에 배치된 물체에 작용하는 물리적인 환경
공간에 배치된 물체가 월드로부터 물리적인 영향을 받으려면 Collision 정보가 필요하다!!!
ex. 중력
렌더링 (Rendering)
엔진이 제공하는 시각적인 기능
빛, 이에 반응하는 Material
물리기반 렌더링 시스템 제공
액터 (Actor) : 언리얼 엔진에서 콘텐츠를 구성하는 최소 단위의 물체
자신에게 주어진 역할을 수행하는 물체!!
레벨(Level) : 월드에 배치된 액터들의 집합
플레이어에게 주어지는 스테이지라고 생각해도 될듯!
흰색 : 레벨을 구성하는 미리 만들어진 액터
노란색 : 플레이 이후 생성된 액터
컴포넌트 (Component) : 액터가 조합할 수 있도록 규격화된 기능들
액터는 여러 개의 컴포넌트를 가질 수 있다.
StaticMesh Component
StaticMesh(애니메이션 없음) 사용
시각적 기능 + 물리적 기능
주로 배경 물체
SkeletalMesh Component
SkeletalMesh(애니메이션O) 사용
시각적 기능 + 캐릭터의 물리 기능 + 애니메이션
주로 캐릭터
Collision Component
지정한 영역에 물리적인 기능 설정
Sphere/Box/Capsule
Camera Component
Audio Component
ParticleSystem Component
Light Component
Movement Component
: 액터의 컴포넌트 중 대표하는 하나의 컴포넌트
반드시 지정해야 함
언리얼 오브젝트 : 언리얼 실행 환경에 의해 관리되는 C++ 객체
언리얼 오브젝트라면 UPROPERTY 매크로를 활용하여 언리얼 실행 환경에서 자동으로 메모리 관리 가능
(더이상 사용되지 않는 객체는 할당된 메모리를 자동으로 소멸시켜줌!!)
클래스 선언 매크로
: 해당 클래스가 언리얼 오브젝트임을 선언하기 위한 매크로
클래스 선언의 맨 윗줄 : UCLASS
클래스 내부 : GENERATED_BODY
클래스 이름 접두사
A : Actor 클래스
U : Actor가 아닌 클래스
generated.h 헤더파일
generated.h : 언리얼 헤더 툴에 의해 자동으로 생성되는 부가 파일
외부 모듈에의 공개 여부
DLL 내 클래스 정보를 외부에 결정하는 키워드
이 키워드가 없으면 다른 모듈에서 해당 객체에 접근할 수 없다
'모듈명_ API'
#include "MyCharacter.generated.h" // generated.h
UCLASS() // 클래스 선언 매크로
class HUNT_PROTOTYPE_API AMyCharacter : public ACharacter // HUNT_PROTOTYPE_API
{ // AMyCharacter에서 A!!
GENERATED_BODY() // 클래스 선언 매크로
public:
UPROPERTY(VisibleAnywhere, Category = Collision)
UCapsuleComponent* Capsule;
...
}
{오브젝트 타입}'{폴더명}/{파일명}/{에셋명}
에셋 경로 정보는 게임 실행 중 변경될 일이 없으므로 static으로 선언해 처음 한 번만 초기화한다!
// SkeletalMesh 불러오기
static ConstructorHelpers::FObjectFinder<USkeletalMesh> SK_KWANG_GDC(TEXT("SkeletalMesh'/Game/ParagonKwang/Characters/Heroes/Kwang/Meshes/Kwang_GDC.Kwang_GDC'"));
if (SK_KWANG_GDC.Succeeded())
{
GetMesh()->SetSkeletalMesh(SK_KWANG_GDC.Object);
}
만약 블루프린트 에셋의 클래스 정보를 넘겨받고 싶다면, 에셋 경로에 '_C' 접미사를 붙이면 된다!
// Blueprint 클래스 정보 불러오기
static ConstructorHelpers::FClassFinder<UAnimInstance> ANIM_BP_KWANG(TEXT("AnimBlueprint'/Game/Animation/ABP_MyCharacter.ABP_MyCharacter_C'"));
if (ANIM_BP_KWANG.Succeeded())
{
GetMesh()->SetAnimInstanceClass(ANIM_BP_KWANG.Class);
}