본문 바로가기
이펙트 (FX)/이펙트 팁 : Unreal

[Unreal] Your First Game in Unreal Engine 5 (Stack O Bot, Step 1/4)

by Minkyu Lee 2026. 7. 25.

개요

처음부터 게임 프로젝트를 구성해보는 기초 단계를 학습 자료를 소개한다.

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을 활용하여 조명 환경을 빠르게 구축합니다.
    • Directional Light: 메인 태양광을 배치하고 회전(Ctrl + L) 및 광도를 설정합니다. [02:12]
    • Sky Light, Sky Atmosphere, Volumetric Clouds, Exponential Height Fog: 레벨에 실제 대기감과 하늘을 추가합니다. Sky Light 패널에서 Realtime Capture 옵션을 활성화하여 대기광 변화를 즉각 반영하도록 설정합니다. [02:34]
  • 아웃라인 정리 습관 (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):
    • Constant 노드(키보드 1 + 좌클릭)를 Roughness에 연결하여 표면 광택을 지정합니다. [04:43]
    • Normal 맵과 Grayscale Grunge 텍스처를 노드 그래프에 적용하여 일관된 광택 대신 거친 질감을 덧씌웁니다. [05:05]
  • 금속(Metal) 머티리얼 및 Texture Coordinates(UVs) (00:05:48):
    • Metallic 파라미터를 1.0으로 설정하고, Roughness 텍스처의 채널을 분리하여 적용합니다. [06:00]
    • TextureCoordinate 노드: Normal 맵이 과도하게 굵게 표현되는 현상을 막기 위해 TextureCoordinate 노드를 타일링 값(U: 5, V: 5)으로 노드 UV 핀에 연결하여 타일 스케일을 조정합니다. [06:41]
    • 텍스처 채널 패킹 활용: 텍스처 1장에 RGB 채널별로 서로 다른 정보를 저장한 경우, R 채널만 추출해 Roughness에 접속하여 메모리를 절약합니다. [07:02]
  • 카본 및 Vertex Color 활용 (00:07:20):
    • Vertex Color 노드: DCC 도구에서 지오메트리 버텍스에 미리 칠해둔 색상 정보(Vertex Color)를 Vertex Color 노드로 가져옵니다. [08:56]
    • Base Color 텍스처 결과값과 Vertex Color 노드를 Multiply 노드로 연산하여 조화시킨 후 최종 Base Color 노드 핀에 접속합니다. [09:03]
  • 배경 바닥 및 씬 시각화 테스트 (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):
    • Actor 클래스 기반 블루프린트를 생성하고 스태틱 메시 컴포넌트(Crate Mesh)를 추가합니다. [10:47]
    • 컴포넌트 Details 탭에서 Simulate Physics를 활성화하고 Linear/Angular Damping(선형/각 감도) 수치를 높여 공기 저항/마찰 속성을 클래스 차원에서 부여합니다. [11:26]
    • 동일 블루프린트를 씬에 다수 드롭할 때 인스턴스 전체에 기본 물리가 일괄 적용되도록 처리합니다. [11:52]

4. Landscape 절차적 지형 조각 및 레이어 머티리얼 (00:12:03 ~ 00:18:16)

  • Landscape 스컬프팅 (00:12:03):
    • 레벨의 기존 평면을 제거하고 Landscape Mode로 진입하여 지형을 생성합니다. [12:11]
    • Brush Size, Strength, Falloff 수치를 조절하며 계곡(Valley) 지형을 높이고, Shift 키를 누른 채 드래그하여 지형을 깎은 후 Smooth 툴로 경계면을 정리합니다. [12:46]
  • Landscape Layer Blend 머티리얼 노드 (00:13:21):
    • 지형 머티리얼(M_Landscape)을 생성하고 Fully Rough 옵션을 켜 표면 반사를 제거합니다. [13:36]
    • Landscape Layer Blend 노드를 추가하고 Sand, Grass 2개 레이어를 생성합니다. [13:45]
    • Weight Blended Info Layer: 뷰포트의 Landscape Paint 탭에서 각 레이어에 대응하는 Target Layer Info 에셋을 새로 생성 및 할당해야 지형 위 칠하기 작업이 정상 작동합니다. [14:31]
  • World-Aligned Texturing 기법 (00:15:45):
    • 일반 UV 기반 타일링 사용 시 지형 면적이 커지면 반복 패턴이 노출되는 문제를 해결하기 위해 Absolute World Position 노드를 사용합니다. [15:45]
    • ComponentMask 노드로 X, Y 축 좌표(R, G 채널)만 추출한 후 적절한 스케일 값(예: 256, 512)으로 나누어(Divide) UV 핀에 전달함으로써, 지형의 오프셋에 영향받지 않는 절대 세계 좌표 타일링을 완성합니다. [15:51]
  • Named Reroute 노드를 이용한 머티리얼 그래프 정리 (00:16:56):
    • UE5의 Named Reroute 노드를 사용해 연산 처리된 모듈 데이터에 이름(Sand, Grass)을 부여하고, 복잡한 노드 연결 선을 가독성 높게 단일 핀 구조로 연결합니다. [17:00]
    • 풀(Grass) 레이어 표현 시 Lerp 노드와 Grayscale 텍스처를 연동하여 두 종류의 녹색 컬러 표현을 알파값 기준으로 섞어 자연스러운 풀 색감을 연출합니다. [17:16]

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):
    • 약 600만 개의 삼각면으로 구성된 Flat Rock FBX 에셋 임포트 옵션에서 Build Nanite 체크박스를 활성화합니다. [20:51]
    • Nanite 시각화 모드(Nanite Visualization - Triangles)를 켜서 뷰포트 카메라 거리에 따라 폴리곤 렌더링이 밀도 있게 자동 제어되는 현상을 확인합니다. [21:13]
  • Triplanar 텍스처링 응용 (00:21:29):
    • 수직 방향 투영 시 측면 늘어남 현상을 극복하기 위해 Vertex Normal 노드의 B 채널(Z축 수직 방향)을 추출하여 Lerp 노드의 알파값으로 제공합니다.
    • 바위 상단면에는 모래 텍스처가, 측면 수직면에는 바위 결 텍스처가 자동 매핑되도록 처리합니다. [22:42]
  • Foliage Tool 스태틱 메시 대량 배치 (00:23:26):
    • Static Mesh Foliage 에셋을 생성하고 Nanite 바위 메시를 탑재합니다. Collision 옵션을 Block All로 세팅합니다. [23:47]
    • Foliage 브러시 툴을 사용하여 계곡 전역에 600만 폴리곤 바위 에셋을 수백 개 이상 빽빽하게 칠하되, 프레임 드랍 없이 연산되는 프로세스를 시연합니다. [24:33]
  • 기존 UE4 에셋 마이그레이션(Migrate) (00:25:46):
    • 외부 프로젝트(Stackobots)에서 필요한 나무 및 고사리(Fern) 에셋을 선택한 뒤 Asset Actions -> Migrate 기능을 통해 현재 프로젝트 Content 폴더로 안전하게 이관 및 배치합니다. [26:08]

6. 코어 게임플레이 프레임워크 및 카메라 세팅 (00:27:14 ~ 00:32:32)

  • 게임 모드 구조 및 오버라이드 (00:27:24):
    • UE5의 기본 스폰 체계(GameMode, Pawn, PlayerController)를 커스텀 에셋으로 대체하기 위해 Framework 폴더를 생성합니다. [02:00]
    • GameModeBase 클래스를 상속받는 BP_GameMode, Character 클래스를 상속받는 BP_Bot, PlayerController를 상속받는 BP_PlayerController를 작성합니다. [02:30]
    • Project Settings의 Maps & Modes에서 커스텀 BP_GameMode를 프로젝트 기본값으로 등록합니다. [02:54]
  • 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):
    • 채널별 마스크 텍스처(R: Emissive/Metallic, G: Roughness/Orange Mask, B: AO)를 분리 연산하여 디테일한 머티리얼을 코딩합니다. [03:52]
    • Flipbook 노드를 이용한 아틀라스 표정 제어: 4x4 그리드 아틀라스 표정 텍스처를 다루기 위해 Flipbook 노드를 사용합니다. Num Rows/Columns 값을 4로 지정하고, Parameter 수치를 조정하여 표정 인덱스 번호를 정적으로 지정하거나 애니메이션할 수 있도록 노드를 짜 넣습니다. [04:11]
  • 캐릭터 Capsule Collision 오프셋 보정 (00:43:04):
    • BP_Bot의 Skeletal Mesh 컴포넌트에 방금 제작한 캐릭터 메시 및 머티리얼을 지정합니다. [04:10]
    • 캐릭터 정면 방향이 바라보도록 Mesh의 Z축 회전값을 -90도 조정하고, Capsule Component의 반지름(Radius)과 높이(Half Height)를 캐릭터 피트감에 맞춰 축소 정렬합니다. [04:23]

9. Animation Blueprint, State Machine 및 Blend Space 1D (00:43:04 ~ 00:52:30)

  • Movement Component 속성 튜닝 (00:43:56):
    • 이동 시 마우스 방향을 자연스럽게 바라보도록 Orient Rotation to Movement 옵션을 활성화하고 회전 속도(Rotation Rate)를 높입니다. [04:05]
    • SpringArm 회전 속성을 Absolute World로 전환하여 캐릭터 회전 시 카메라가 함께 돌아가지 않도록 고정합니다. [04:20]
    • Walk Speed(400), Max Acceleration, Ground Friction 수치를 조절해 미끄러지듯 가속 및 감속하는 피드백을 구현합니다. [04:44]
  • Animation Blueprint(ABP_Bot) 생성 및 State Machine 구축 (00:45:26):
    • 스켈레톤 기반 ABP_Bot 에셋을 생성하고 내부에 Locomotion State Machine 노드를 추가합니다. [04:13]
    • State Machine 내부를 Idle 상태와 Walk_Run 상태로 구분하고 양방향 Transition Rule을 정의합니다. [04:33]
  • Event Graph를 통한 속도 데이터 추출 (00:48:25):
    • Event Blueprint Update Animation 노드에서 Try Get Pawn Owner -> Get Velocity -> Vector Length XY 연산을 통해 캐릭터의 수평 이동 속도를 구하고 float 변수(Ground Speed)에 대입합니다. [04:56]
    • Transition Rule: Ground Speed가 0 초과일 때 Idle -> Walk_Run으로 전환하고, Ground Speed가 5 이하일 때 Walk_Run -> Idle로 복귀하도록 세팅합니다. [04:59]
  • 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):
    • BP_Orb 블루프린트를 생성하고 스태틱 메시 컴포넌트의 Collision 반응을 OverlapOnlyPawn으로 변경합니다. [05:36]
    • Project Settings -> Input에서 Spawn Orb 액션(스페이스바)을 매핑합니다. [05:57]
    • PlayerController에서 스페이스바 입력 시 Spawn Actor from Class 노드를 통해 현재 플레이어 캐릭터 위치 좌표에 BP_Orb 인스턴스를 즉시 생성합니다. [05:57]
  • 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):
    • 문틀 메시 하위에 Left Anchor, Right Anchor 역할을 할 Scene 컴포넌트 2개를 좌우로 배치합니다. [01:05:37]
    • 각 Scene 컴포넌트의 자식으로 문판 메시(Door_L, Door_R)를 종속시켜, 자식 메시의 상대 좌표를 (0,0,0)으로 손쉽게 제어할 수 있도록 트릭을 적용합니다. [01:06:08]
  • Break Tangents를 활용한 가속/감속 커브 연출 (01:06:38):
    • Door Animation 타임라인 노드를 생성하고 키프레임을 우클릭하여 Break 옵션으로 전환합니다. [01:07:18]
    • 핸들러 탄젠트 곡선을 가파르고 부드럽게 조정하여 단순 선형 이동이 아닌, 문이 열릴 때 묵직하게 가속되었다가 멈추는 물리적 감속 효과를 구현합니다. [01:07:25]
    • 커브 값에 -70을 곱해 Y축 방향 슬라이딩 오프셋 수치로 입력합니다. [01:07:48]

12. Actor Component & Event Dispatcher 모듈형 통신 (01:08:44 ~ 01:13:20)

  • BP_InteractionComponent 에셋 제작 (01:08:49):
    • 특정 클래스 간의 직접적인 하드 참조(Hard Reference) 결합도를 낮추기 위해 Actor Component 기반의 블루프린트를 생성합니다. [01:08:55]
    • 내부 커스텀 이벤트 Start Interaction, Stop Interaction을 만들고 On (Boolean) 변수 상태를 변경합니다. [01:09:22]
    • Event Dispatcher 생성: 컴포넌트 내에 On Interaction 이벤트를 선언하고, 각 Start/Stop 이벤트 실행 시 디스패처를 호출(Call)하도록 작성합니다. [01:09:30]
  • 발신기(Pressure Plate)에 컴포넌트 탑재 (01:10:03):
    • BP_PressurePlate 컴포넌트 창에 BP_InteractionComponent를 추가합니다. [01:10:03]
    • 밟았을 때(Begin Overlap) 컴포넌트의 Start Interaction을, 발을 뗐을 때(End Overlap) Stop Interaction을 호출하게 연동합니다. [01:10:18]
  • 수신기(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):
    • 캐릭터 Run 애니메이션을 열고 Notify 트랙을 추가합니다. [01:16:56]
    • 오른발과 왼발이 지면에 닿는 특정 타임라인 프레임 위치에 우클릭하여 Play Niagara Particle Effect 노티파이를 생성합니다. [01:17:03]
    • Niagara System에 FX_Dust를 지정하고 Socket Name 핀에 각각 foot_r, foot_l을 적어 넣음으로써 발바닥 뼈 위치에서 정확히 먼지가 뿜어지도록 연동합니다. [01:17:22]
  • MetaSounds 프로시저럴 발자국 오디오 생성 (01:18:05):
    • MetaSounds Source 에셋(SFX_Footstep)을 생성합니다. [01:18:24]
    • 외부 웨이브 파일 없이, 내부 White Noise 노드와 Square 오시레이터 음원을 믹스하고 Envelope 노드 및 Multiply 노드로 감쇄 곡선을 설계하여 발이 지면에 닿는 순간의 타격음을 완전히 프로시저럴 방식으로 합성해 냅니다. [01:18:46]
    • 캐릭터 Run 애니메이션 Notify 트랙에 Play Sound 노티파이를 좌/우 발에 각각 배치하여 발자국 사운드를 연결합니다. [01:20:12]
  • 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]

댓글