언리얼 프로젝트 폴더 구성
- Config 폴더 : 프로젝트의 설정 값을 보관하는 폴더(삭제하면 안 됨)
- Content 폴더 : 프로젝트에서 사용하는 애셋(모델, 텍스처 등)을 관리하는 폴더(삭제하면 안 됨)
- Intermediate 폴더 : 프로젝트 관리에 필요한 임시 파일 저장(삭제 가능, 자동 재생성)
- Saved 폴더 : 작업 중 생성된 결과물 저장 (예: 세이브 파일, 스크린샷)(삭제 가능)
- Binaries 폴더 : C++ 코드가 컴파일된 실행 파일(EXE) 저장(삭제 가능, 빌드시 재생성)
- Source 폴더 : C++ 소스 코드 및 빌드 설정을 담은 C# 파일 존재(삭제하면 안 됨)
- .sln 파일 : 비주얼 스튜디오 솔루션 파일(C++ 프로젝트를 관리하기 위한 파일)
Config, Content, Source는 삭제하면 안 되고, Intermediate, Saved, Binaries는 필요할 때 삭제 가능
C++ 프로젝트 빌드 구성
- DebugGame : 디버깅을 위한 최적화되지 않은 빌드 (EXE 생성)
- DebugGame : Editor DebugGame과 동일한 수준의 에디터용 DLL 파일 생성
- Development : 중간 수준 최적화 및 디버깅이 가능한 빌드 (EXE 생성)
- Development Editor : Development과 동일한 수준의 에디터용 DLL 파일 생성 (기본값)
- Shipping : 최종 배포용 빌드. 최적화된 코드 (EXE 생성)
Editor가 붙으면 에디터용 DLL을 생성.
Shipping은 최적화된 배포용 빌드.
기본값은 Development Editor.
월드(World)
- 월드는 언리얼 엔진에서 게임 컨텐츠를 구동하기 위한 필수적인 환경을 의미하며 다음과 같은 요소로 구성된다
- 공간(Space) : 3D 좌표계를 기반으로 게임 오브젝트를 배치하는 영역(단위: cm)
- 시간(Time) : 게임 내 시간 흐름을 제어할 수 있음(시간 스케일 조절 가능)
- 물리(Physics) : 물체에 적용되는 물리 환경(콜리전 필요)
- 렌더링(Rendering) : 언리얼 엔진의 물리 기반 렌더링 시스템(PBR) 사용
액터(Actor)
- 언리얼 엔진에서 모든 오브젝트의 최소 단위이며, 다음과 같은 요소로 구성된다
- 이름(Name) : 액터의 고유한 명칭 (여러 액터가 같은 이름을 가질 수도 있음).
- 유형(Type) : 액터의 클래스 유형 (예: ACharacter, AStaticMeshActor).
- 트랜스폼(Transform) : 액터의 위치, 회전, 크기를 정의.
- 프로퍼티(Property) : 액터의 속성 값 (디테일 창에서 편집 가능).
- 게임 로직(Game Logic) : C++ 또는 블루프린트로 동작 정의.
액터의 주요 기능 3가지
1. 시각적 기능 : 플레이어에게 어떻게 보여질 것인가?
2. 물리적 기능 : 액터의 이동과 충돌을 어떻게 처리할 것인가?
3. 움직임 : 액터가 어떻게 이동할 것인가?
언리얼 엔진의 주요 컴포넌트
- 액터는 컴포넌트를 통해 여러 기능을 조합할 수 있다
- taticMesh : 애니메이션 없는 모델 (건물, 배경 오브젝트 등)
- SkeletalMesh : 애니메이션이 있는 모델 (캐릭터, 몬스터 등)
- Collision : 충돌 판정을 위한 컴포넌트 (시각적 기능 없음)
- Camera : 화면에 현재 장면을 출력하는 기능
- Audio : 소리 출력 기능
- Particle System : 이펙트(불꽃, 연기, 폭발 등) 표현
- Light : 광원 효과 추가 (전구, 태양광 등)
- Movement : 액터의 이동을 제어
언리얼 오브젝트와 메모리 관리
- 언리얼 엔진은 객체가 더 이상 사용되지 않으면 자동으로 메모리를 해제하는 기능을 제공
- 자동으로 관리하게 만들려면 코드에서 UPROPERTY라는 매크로를 사용해 객체를 지정해줘야 한다
- 모든 객체가 자동으로 관리되는 것은 아니고 언리얼 오브젝트만 가능하다
UPROPERTY 매크로 구문 내에서 사용하는 키워드 값들은 언리얼 실행 환경에 명령을 내리고자 언리얼 엔진에서 지정한 문법이다
UPROPERTY 매크로 키워드
- VisibleAnywhere : 에디터에서 보이지만 수정불가
- VisibleDefaultsOnly : 디폴트 값(클래스 디폴트)에서만 보이지만 수정 불가
- VisibleInstanceOnly : 인스턴스에서만 보이지만 수정 불가
- EditAnywhere : 에디터에서 수정 가능
- EditDefaultsOnly : 클래스 디폴트에서만 수정 가능(인스턴스에서는 수정 불가)
- EditInstanceOnly : 인스턴스에서만 수정 가능(클래스 디폴트에서는 수정 불가)
- BlueprintReadWrite : 블루프린트에서 읽기/쓰기 가능
- BlueprintReadOnly : 블루프린트에서 읽기 가능, 수정 불가
- AllowPrivateAccess : 변수 데이터를 캡슐화(프로그래밍에서 보호)
언리얼 오브젝트를 만들기 위한 4가지 규칙
- 클래스 선언 매크로 : UCLASS()와 GENERATED_BODY() 선언
- 클래스 접두사 : A -> 액터 클래스, U -> 액터가 아닌 클래스
- generated.h 헤더 포함 : 자동 생성된 언리얼 관련 코드 필요
- 외부 모듈 공개 여부 : 모듈명_API 키워드 추가(ex: MyProject_API)