
개요
처음부터 게임 프로젝트를 구성해보는 기초 단계를 학습 자료를 소개한다.
Stack O Bot 샘플 프로젝트를 받으면 Content 폴더 안에 .zip 파일 리소스가 있다.
내용
1. 영상 정보
- 영상 제목: Your First Game in UE5 | Tech Talk | State of Unreal 2022
- 채널명: Unreal Engine
- 영상 링크: https://youtu.be/Itd677YZi50
2. 핵심 요약 (Conclusion)
- 언리얼 엔진 5(UE5)의 핵심 기능과 기본 워크플로우: Lumen(실시간 글로벌 일루미네이션), Nanite(가상화 마이크로폴리곤 지오메트리), MetaSounds(프로시저럴 오디오), World Partition 등 UE5의 최신 시스템을 기반으로 한 소규모 탑다운(Top-down) 게임 제작 프로세스 전반을 설명합니다.
- 에셋 임포트 및 고품질 머티리얼 제작: 스태틱 메시, 스켈레탈 메시 및 텍스처(Normal, Roughness, Albedo 등) 임포트 프로세스와 Vertex Color, World Position, Texture Coordinates(UV Tiling) 노드를 활용한 고급 머티리얼 그래프 구축 방식을 다룹니다.
- 프로시저럴 월드 구성: Landscape 노드로 지형을 조각·채색하고, Landscape Grass Type 및 Layer Blend 노드를 이용해 풀을 자동 스폰하며, 600만 패싯 이상의 고해상도 Nanite 에셋을 배치하여 성능 저하 없이 밀도 높은 배경을 구성하는 방법을 설명합니다.
- 블루프린트 프레임워크 및 게임플레이 로직 구축: GameModeBase, Pawn(Character), PlayerController, AIController 구조의 계층형 블루프린트 프레임워크 설계법과 탑다운 시점 카메라(SpringArm), 마우스 커서 추적 이동, 에어리어 경계 오버랩, 타이머 기반 AI 오브 수집 기능을 다룹니다.
- 스켈레탈 메시 애니메이션 및 시스템 연동: 리깅된 스켈레탈 메시 머티리얼 구성(Sub-UV Flipbook을 이용한 동적 얼굴 표현), Animation Blueprint, State Machine, Blend Space 1D 및 Footstep 분석 기능을 이용한 스무스한 이동 애니메이션을 연동합니다.
- 모듈형 인터랙션 및 시스템 연동: Actor Component와 Event Dispatcher를 활용해 압력판(Pressure Plate)과 문(Door) 사이의 유연하고 확장성 높은 모듈형 블루프린트 통신 구조를 설계합니다.
- 폴리시(Polish) 작업: Niagara VFX(발자국 먼지 파티클 및 Notify 연동), MetaSounds(프로시저럴 발자국 오디오 생성 및 Notify 연동), Camera Shake 노드를 활용하여 게임 연출과 피드백의 완성도를 높입니다.
3. 타임라인별 상세 정리
1. UE5 인터페이스 개요 및 레벨/라이팅 환경 구축 (00:00:00 ~ 00:03:36)
- 새 프로젝트 및 맵 생성 (00:00:30): UE5 시작 화면에서 템플릿 대신 Empty Project를 선택하고, 기본 월드 파티션 맵 대신 완전히 비어있는 레벨을 생성합니다.
- UE5 UI 구성 요소 (00:01:17): Viewport, Outliner, Details Panel, Mode Selector(Landscape, Foliage 등), Create Menu, Content Drawer(Ctrl + Space, F10으로 토글 가능)의 역할을 다룹니다.
- Environmental Light Mixer 기반 조명 설정 (00:02:02): 실시간 글로벌 일루미네이션 시스템인 Lumen을 활용하여 조명 환경을 빠르게 구축합니다.
- 아웃라인 정리 습관 (00:02:50): 스폰된 모든 스폰 에셋을 좌표 (0, 0, 0)에서 정렬하고 Outliner 내 'Light' 폴더를 생성하여 아웃라이너를 구조화합니다. 이후 새 맵을 Valley라는 이름으로 저장합니다. [03:23]
2. 에셋 임포트 및 고품질 머티리얼 그래프 제작 (00:03:37 ~ 00:09:59)
- 스태틱 메시 FBX 임포트 (00:03:43): 외부 DCC(Blender 등)에서 작성된 SM_Crate 스태틱 메시 FBX 에셋을 임포트합니다. 자동 생성된 3개의 머티리얼 슬롯을 에디터 내에서 확인합니다. [04:02]
- 플라스틱 머티리얼 (00:04:19):
- 금속(Metal) 머티리얼 및 Texture Coordinates(UVs) (00:05:48):
- 카본 및 Vertex Color 활용 (00:07:20):
- 배경 바닥 및 씬 시각화 테스트 (00:09:16): 구체(Sphere)를 큐브(Cube) 스태틱 메시로 대체하고 Z축은 얇게, X/Y축은 크게 스케일을 늘려 지면을 구성한 후 작성한 상자 에셋을 배치하여 라이팅 반응을 테스트합니다. [09:26]
3. 블루프린트 프레임워크 기초 및 렌더링 최적화 (00:10:00 ~ 00:12:02)
- 레벨 배치 방식 대 블루프린트화 (00:10:02): 레벨상에 배치된 개별 스태틱 메시에서 직접 Simulate Physics를 켜면 해당 개체에만 물리 속성이 부여되는 단점이 있습니다. [10:07]
- BP_Crate 블루프린트 제작 (00:10:35):
4. Landscape 절차적 지형 조각 및 레이어 머티리얼 (00:12:03 ~ 00:18:16)
- Landscape 스컬프팅 (00:12:03):
- Landscape Layer Blend 머티리얼 노드 (00:13:21):
- World-Aligned Texturing 기법 (00:15:45):
- Named Reroute 노드를 이용한 머티리얼 그래프 정리 (00:16:56):
5. Foliage 자동 스폰 및 Nanite 메쉬 통합 (00:18:17 ~ 00:27:13)
- Landscape Grass Type 기반 식생 자동 배치 (00:18:17):
- Grass 에셋의 Blend Mode를 Masked로 변경하고 Opacity Mask 노드 핀에 알파 텍스처를 연결하여 인스턴싱 환경을 제작합니다. [18:59]
- Landscape Grass Type 에셋을 생성하여 Grass 메시, Density(밀도), Min/Max Scale 수치를 기입합니다. [19:43]
- 지형 머티리얼 그래프 내부에서 Landscape Layer Sample 노드(Layer Name: Grass)를 호출하고 이를 Landscape Grass Output 노드와 연결하여 Grass 레이어가 칠해진 영역에만 풀 덩어리가 자동 스폰되도록 구축합니다. [20:13]
- 600만 폴리곤 초고해상도 Nanite 에셋 임포트 (00:20:35):
- Triplanar 텍스처링 응용 (00:21:29):
- 수직 방향 투영 시 측면 늘어남 현상을 극복하기 위해 Vertex Normal 노드의 B 채널(Z축 수직 방향)을 추출하여 Lerp 노드의 알파값으로 제공합니다.
- 바위 상단면에는 모래 텍스처가, 측면 수직면에는 바위 결 텍스처가 자동 매핑되도록 처리합니다. [22:42]
- Foliage Tool 스태틱 메시 대량 배치 (00:23:26):
- 기존 UE4 에셋 마이그레이션(Migrate) (00:25:46):
- 외부 프로젝트(Stackobots)에서 필요한 나무 및 고사리(Fern) 에셋을 선택한 뒤 Asset Actions -> Migrate 기능을 통해 현재 프로젝트 Content 폴더로 안전하게 이관 및 배치합니다. [26:08]
6. 코어 게임플레이 프레임워크 및 카메라 세팅 (00:27:14 ~ 00:32:32)
- 게임 모드 구조 및 오버라이드 (00:27:24):
- PlayerStart 에셋 및 카메라(Spring Arm) 탑재 (00:30:05):
- 레벨 내 원하는 출발 지점에 PlayerStart 노드를 배치합니다 (End 키로 지면에 밀착). [03:17]
- BP_Bot 블루프린트에 SpringArm 컴포넌트와 Camera 컴포넌트를 자식 관계로 연결합니다. [03:38]
- SpringArm 회전값을 조절하고 Arm Length를 늘린 뒤, 카메라 Field of View(FOV)를 45도로 낮춰 시야 왜곡이 적은 아이소메트릭 Top-Down 시점을 완성합니다. [03:56]
- 카메라가 장애물에 닿았을 때 갑자기 좁혀지는 현상을 방지하고자 SpringArm의 Do Collision Test 옵션을 해제합니다. [03:20]
7. 탑다운 커서 추적 이동 및 액션 바인딩 (00:32:33 ~ 00:37:11)
- Event BeginPlay / Event Tick 동작 원리 (00:32:48):
- Print String 노드로 라이프사이클을 테스트하여 Tick은 매 프레임 수치 변경이나 트래킹 연산 시에만 신중하게 사용해야 함을 강조합니다. [03:07]
- 마우스 커서 기반 Vector 연산 로직 (00:33:37):
- BP_PlayerController에서 Get Controlled Pawn 노드로 조종 대상 폰을 찾고, 매 프레임 Add Movement Input을 호출하도록 설계합니다. [03:46]
- Get Hit Result Under Cursor by Channel 노드를 호출해 커서가 가리키는 3차원 월드 위치 좌표를 구합니다. [03:13]
- Get Actor Location으로 폰의 위치를 구한 후, Get Direction Vector 수학 노드를 적용하여 [폰 위치 -> 마우스 월드 위치]로 향하는 단위 벡터를 구하고, 이를 Add Movement Input의 World Direction 핀에 입력합니다. [03:38]
- Controller Details 패널에서 Show Mouse Cursor 옵션을 활성화합니다. [03:12]
- Action Input Binding 및 이동 토글 (00:35:25):
- Project Settings -> Input 패널에서 Action Mapping 항목에 Toggle Movement를 신설하고 마우스 좌클릭(Left Mouse Button)을 매핑합니다. [03:46]
- 블루프린트 내에서 Action Event를 수신하고, Pressed 시 Boolean 변수(Add Movement)를 True, Released 시 False로 세팅합니다. [03:30]
- Tick 루프에 Branch 노드를 배치하여 Add Movement 변수가 True 상태일 때만 커서 방향 이동 연산을 실행하도록 제한합니다. [03:47]
8. 캐릭터 리깅 메시 매핑 및 머티리얼 애니메이션 (00:37:12 ~ 00:43:03)
- 스켈레탈 메시(Skeletal Mesh)와 스켈레톤(Skeleton) 관계 (00:37:12):
- 캐릭터 FBX 임포트 시 생성되는 뼈대 계층구조 에셋(Skeleton)과 피부 겉면 지오메트리 에셋(Skeletal Mesh)의 구분을 명확히 설명합니다. [03:04]
- 캐릭터 머티리얼 및 Dynamic Face Expression (00:38:31):
- 캐릭터 Capsule Collision 오프셋 보정 (00:43:04):
9. Animation Blueprint, State Machine 및 Blend Space 1D (00:43:04 ~ 00:52:30)
- Movement Component 속성 튜닝 (00:43:56):
- Animation Blueprint(ABP_Bot) 생성 및 State Machine 구축 (00:45:26):
- Event Graph를 통한 속도 데이터 추출 (00:48:25):
- Blend Space 1D 및 Footstep Analysis (00:50:50):
- Blend Space 1D 에셋을 생성하고 가로축 Axis 이름을 Speed(범위: 0 ~ 400)로 정의합니다. [05:03]
- 속도 0 지점에 Idle, 중간 지점에 Walk, 400 지점에 Run 애니메이션을 배치합니다. [05:12]
- UE5 Footstep Analysis 기능: Blend Space 하단 메뉴에서 Locomotion 분석 기능을 켜고 좌/우 발 뼈(foot_l, foot_r)를 지정하여 클릭 시, 애니메이션 보폭과 가속도 비율에 맞추어 발 미끄러짐(Foot Sliding) 현상이 없는 최적의 보간 노드로 자동 재배치시킵니다. [05:36]
- 완성된 Blend Space를 State Machine의 Walk_Run 노드 내부에 연결하고 Ground Speed 변수로 드라이브합니다. [05:14]
10. AIController 및 수집용 오브(Orb) 스폰 연동 (00:52:31 ~ 01:01:21)
- AIController(BP_AIController) 제작 (00:52:32):
- 플레이어가 직접 조종하는 PlayerController와 별개로, 인공지능 보드의 뇌 역할을 수행할 BP_AIController를 생성합니다. [05:24]
- NavMeshBoundsVolume 배치 (00:53:44):
- 레벨에 NavMeshBoundsVolume을 드롭하고 영역을 확장한 뒤, 키보드 단축키 'P'를 눌러 이동 가능 구역(초록색 영역)을 시각적으로 확인합니다. [05:53]
- Construction Script를 이용한 인스턴스별 색상 가변화 (00:54:28):
- BP_Bot의 Construction Script 패널에서 Mesh의 0번 머티리얼 슬롯에 대해 Create Dynamic Material Instance 노드를 호출합니다. [05:44]
- Linear Color 변수(Color)를 생성하고 변수의 눈동자 아이콘(Instance Editable)을 켜서, 뷰포트에 배치된 AI 봇 인스턴스마다 각각 다른 유닛 컬러(파란색, 주황색 등)를 지정할 수 있도록 가변 처리합니다. [05:510]
- 스폰 및 오버랩 가능한 오브(BP_Orb) 제작 (00:55:51):
- AI의 순차적 Orb 추적 및 파괴 로직 (00:58:00):
- BP_AIController 내에 Find Orb 커스텀 Pure 함수를 선언합니다. [05:58]
- Get All Actors of Class 노드로 레벨에 존재하는 모든 BP_Orb 배열을 탐색합니다. 배열 길이가 0보다 크면 첫 번째(0번 인덱스) 오브 에셋의 참조값을 반환합니다. [05:58]
- AIMoveTo 노드의 Target Actor 핀에 추출된 오브 참조값을 대입하여 AI가 해당 좌표로 자동 이동하게 만듭니다. [05:59]
- BP_Orb 내에서 OnComponentBeginOverlap 이벤트가 발생했을 때, 접촉한 폰이 플레이어 조종 유닛이 아닐 경우(Is Player Controlled = False) DestroyActor를 실행하여 오브를 제거하고 AI가 다음 오브를 탐색하도록 루프를 완성합니다. [01:00:17]
11. 인터랙션 시스템: 압력판과 문(Door) 연동 (01:01:22 ~ 01:08:43)
- 압력판(BP_PressurePlate) 타임라인 애니메이션 (01:01:28):
- Box Collision 컴포넌트를 만들고 OnComponentBeginOverlap 및 OnComponentEndOverlap 이벤트를 탑재합니다. [01:01:50]
- Timeline 노드(Plate Animation, 길이 0.5초)를 추가하고, 0초일 때 0, 0.5초일 때 1 값을 갖는 Float 커브를 생성합니다. [01:03:02]
- 타임라인 Update 핀 실행 시 Platform 메시의 Set Relative Location 노드를 호출하고 Z축 좌표에 [커브 값 * -10]을 연산해 눌림 효과를 연출합니다. Overlap 시 Play, End Overlap 시 Reverse를 실행합니다. [01:03:51]
- 문(BP_Door) 구조 및 커스텀 슬라이딩 애니메이션 (01:04:54):
- Break Tangents를 활용한 가속/감속 커브 연출 (01:06:38):
12. Actor Component & Event Dispatcher 모듈형 통신 (01:08:44 ~ 01:13:20)
- BP_InteractionComponent 에셋 제작 (01:08:49):
- 발신기(Pressure Plate)에 컴포넌트 탑재 (01:10:03):
- 수신기(Door)의 이벤트 바인딩(Assign) 및 실행 (01:11:03):
- BP_Door에 Actor 타겟을 수신할 변수 Trigger (Actor Object Reference, Instance Editable)를 추가합니다. [01:11:16]
- Event BeginPlay 타이밍에 Trigger 에셋에서 GetComponentByClass 노드를 통해 BP_InteractionComponent가 설치되어 있는지 안전성 검사(IsValid)를 거칩니다. [01:11:36]
- 검사가 통과되면 해당 컴포넌트의 On Interaction Event Dispatcher에 커스텀 이벤트를 Assign 바인딩합니다. [01:12:07]
- 압력판 이벤트를 수신하면 Boolean 상태값에 따라 Open Door와 Close Door 타임라인을 분기 실행하도록 완성합니다. 레벨 피커 아이콘으로 문 에셋의 Trigger 변수에 압력판을 지정합니다. [01:12:45]
13. 디테일 완성(Polish): Niagara VFX, MetaSounds, Camera Shake (01:13:21 ~ 01:24:00)
- Niagara Dust VFX 구축 (01:13:26):
- 빈 Niagara System(FX_Dust)을 작성합니다. 반복 재생을 해제하고 시뮬레이션당 1회 스폰되도록 세팅합니다. [01:13:43]
- Particle Spawn: 10개의 입자를 한 번에 폭발시키는 Spawn Burst Instantaneous 노드를 배치하고, 색상, 스케일(2~4), 질량을 무작위화합니다. [01:14:09]
- Add Velocity Cone: -Z축 콘 방향으로 입자가 뿜어지도록 제어합니다. [01:14:40]
- Particle Update: Scale Sprite Size 노드로 시간이 지남에 따라 입자가 커지게 만들고, Curl Noise Force 노드로 불규칙한 흔들림을 주며, Gravity Force를 반대로 가해 먼지가 공중으로 부유하다 알파값이 옅어지며 사멸하도록 구성합니다. [01:15:07]
- Anim Notify를 통한 Niagara 연동 (01:16:42):
- MetaSounds 프로시저럴 발자국 오디오 생성 (01:18:05):
- Camera Shake 연출 (01:21:03):
- CameraShakeBase 클래스를 상속받는 CameraShake 블루프린트를 작성합니다. [01:21:10]
- Perlin Noise 진동 모드를 선택하고 아주 짧은 Duration(진동 시간), Blend In/Out 타임을 세팅한 뒤 Location Amplitude 수치를 조절합니다. [01:21:20]
- BP_Door 이벤트 그래프에서 문이 열리거나 닫히는 순간 Play World Camera Shake 노드를 호출하여, 문 주변에 플레이어가 위치할 때 중후한 카메라 흔들림 연출이 출력되도록 제작을 마무리합니다. [01:22:06]
'이펙트 (FX) > 이펙트 팁 : Unreal' 카테고리의 다른 글
| [Unreal] Exploring UE5 Features With Stack-O-Bot | Inside Unreal (Step 3/4) (0) | 2026.07.25 |
|---|---|
| [Unreal] Third Person Sample Stack-O-Bot explained (Step 2/4) (0) | 2026.07.25 |
| [Unreal] Stack O Bot 학습과정 추천 (Epic 공식) (0) | 2026.07.25 |
| [Unreal/Material] 나이아가라 메시에 머티리얼로 회전 적용하기 (Niagara, RotateAboutAxis, WPO, Bending 효과) (0) | 2026.07.23 |
| [Unreal/Material] 픽셀 인스펙터 소개 (0) | 2026.07.22 |
댓글