Unreal Engine 모듈 · 플러그인 개발 전체 커리큘럼
이 과정은 구조만 읽고 끝나지 않습니다. 116강에서 빌드·로드 경계를 검증하고, 1733강에서 두 플러그인을 단계적으로 만들며, 34~36강에서 완성·패키징·이식 결과를 남깁니다.
| 강의 | 학습 주제 | 핵심 검증 |
|---|---|---|
| 1 | 모듈과 플러그인은 왜 필요한가 | 재사용 대상과 프로젝트 규칙 분리 |
| 2 | UBT와 UHT 빌드 흐름 | 컴파일 전 생성 단계 구분 |
| 3 | Target·Module·Plugin 구조 | 파일별 책임 추적 |
| 4 | .Build.cs와 의존성 | Public·Private 의존성 결정 |
| 5 | Public·Private 헤더 | 외부 계약 최소화 |
| 6 | API 매크로 | DLL 경계 Symbol 노출 |
| 7 | Module Interface 수명 | 등록과 해제 대칭성 |
| 8 | LoadingPhase | 필요한 시점보다 빠르지 않게 로드 |
| 9 | Runtime 모듈 추가 | Target·Descriptor·Build.cs 연결 |
| 10 | Runtime·Editor·Developer 분리 | Shipping 포함 범위 확인 |
| 11 | 순환 의존성과 Include | 비순환 그래프 복원 |
| 12 | Forward Declaration | Public 헤더 비용 축소 |
| 13 | 로그와 로드 디버깅 | Missing Module 원인 분리 |
| 14 | Plugin Descriptor | 모듈 Type·LoadingPhase 선언 |
| 15 | Content Only와 Code Plugin | 기능에 맞는 유형 선택 |
| 16 | Project와 Engine Plugin | 설치·업데이트 소유권 결정 |
| 17 | Runtime Plugin | 독립 Runtime 모듈 빌드 |
| 18 | Editor Plugin | Editor Target 전용 빌드 |
| 19 | Plugin Module 의존성 | Editor가 Runtime에만 의존 |
| 20 | UDeveloperSettings | 설정 자동 발견과 읽기 |
| 21 | Config 범위와 기본값 | 프로젝트 override 검증 |
| 22 | ToolMenus | 메뉴 등록·해제 |
| 23 | Slate Dockable Tab | Nomad Tab 수명 관리 |
| 24 | Details Customization | PropertyEditor 등록·해제 |
| 25 | Custom Asset·Factory·Definition | 새 Asset 생성·표시 |
| 26 | Data Validation | Validator 자동 발견 |
| 27 | Asset Registry 검사 | 불필요한 Asset 로드 방지 |
| 28 | 상호작용 기능 분리 | 프로젝트 클래스 참조 제거 |
| 29 | Blueprint API와 확장 지점 | C++ 판정과 Blueprint 표현 분리 |
| 30 | 에셋·Content·입력·설정 | Hard Reference·경로 정책 |
| 31 | 테스트·로그·크래시 추적 | 빌드 구성별 회귀 확인 |
| 32 | 패키징과 다른 프로젝트 적용 | BuildPlugin·소비 프로젝트 검증 |
| 33 | 버전 호환성과 배포 점검 | 지원 범위·변경 이력 |
| 34 | Runtime 플러그인 완성 | ReusableInteraction 완성 |
| 35 | Editor 플러그인 완성 | DataGuard 완성 |
| 36 | 빈 C++ 프로젝트 이식·검증 | 독립 설치 검증 보고서 |
학습 원칙
- Public 헤더에 새 타입을 노출할 때마다 소비 모듈까지 전파되는 의존성을 기록합니다.
- Editor 기능은 Editor 모듈에서만 구현하고 Development Game·Shipping 빌드로 경계를 검증합니다.
- 플러그인 코드는 원본 프로젝트 클래스와
/Game/...경로를 직접 참조하지 않습니다. - IDE의 빨간 밑줄보다 UBT의 첫 오류와 UHT의 생성 오류를 우선합니다.
- 최종 검증은 캐시가 남은 원본 프로젝트가 아니라 별도의 빈 C++ 프로젝트에서 수행합니다.