언리얼 스터디를 시작했다.
발사체를 스폰시켜 발사하는 언리얼 토이 프로젝트를 구현해보면서 익힌 기본적인 내용들
1. 에디터 & 뷰포트 빠른 적응
단축키 | 의미 | 주의/팁 |
Play ▶ | 현재 레벨에서 바로 실행 | 중단은 Esc |
F8 | 플레이 중 ‘플레이어 시점’에서 빠져나오기 | 캐릭터(Pawn) 위치 관찰 |
우클릭+WASD | 카메라 이동 | 마우스 휠로 속도 조절 |
Alt + 드래그 | 선택 Actor 복제 후 이동 | 빠른 소품 배치 |
Settings → Engine Scalability | 렌더 품질 / 성능 조절 | 랩톱이면 ‘Medium’ 추천 |
Window → Load Layout → Default | 레이아웃 초기화 | 창 위치가 꼬였을 때 구원 버튼 |
2. UE 5.1 Starter Content 주의사항
UE 5.1부터 Starter Content는 엔진 플러그인처럼 취급 → 원본 파일(맵 포함) 수정 = 재실행 시 초기화
안전한 작업 절차
콘텐츠 브라우저 → 맵(StarterMap 등) 우클릭 → Duplicate
Content 루트 우클릭 → New Folder → Maps
복제본을 Content/Maps로 드래그 → 이후 이 레벨에서만 작업
3. 언리얼의 오브젝트 체계
Actor | 레벨(월드)에 직접 배치 가능한 모든 객체 | ex) 총알, 문, 광원 |
Component | Actor 내부 부품. Transform/머티리얼/충돌 등을 담당 | ex) StaticMeshComponent, BoxCollider |
Pawn | 플레이어나 AI가 소유(possess)해 조종할 수 있는 Actor | ex) 1인칭 캐릭터 |
Brush(CSG) | 지오메트리 부울(additive, subtractive)로 스테이지 지형 제작 | ex) 큐브+Subtractive 큐브 내부 생성 |
4. 블루프린트 기초
구분 | 색 | 역할 |
Execution 핀 | 흰색 | 노드 실행 순서 지정 |
Data 핀 | 파란색 (Obj Ref) 등 | 값·오브젝트 매개변수 전달 |
+) 노드 확장 팁
- Transform 핀 → 우클릭 Split Struct Pins → 위치/회전/스케일 개별 수정
- 여러 노드 드래그 → C 키 : 주석 박스
- 노드 선택 → Collapse to Function : 함수화
5. 예제: 발사체 스폰 및 발사
목표 : Spacebar 입력 시 현재 카메라 전방으로 탄환을 발사
- SpawnActor BP_Projectile
- Spawn Transform → Player 위치(Get Player Pawn)에 대한, GetActorLocation/Rotation 연결
- Add Impulse: SpawnActor에서 return 된 BP_Projectile을 Get StaticMeshComponent로 받아서 Add Impulse 한다.
- Target : Static Mesh Component(해당 메시에 힘을 가하라는 것)
- Impulse : GetForwardVector * 4000
- 흰색 실행선 SpawnActor → Add Impulse: [2. ...]에서 구현된 내용 참고
6. 변수/함수·OOP 패턴
6-1. Ammo 변수 만들기
- My Blueprint 패널 → + Variable → Ammo (Integer)
- Compile → Details 패널에서 기본값(ex) 20) 설정
- 그래프에 드래그 → Get(ctrl+drag)/Set(alt+drag) 노드 생성
6-2. Pure Function: HasAmmo?
Input : Ammo(Int)
Logic : Ammo > 0
Return : Bool
+) Pure 체크 → 실행 핀이 사라진다. side effect가 없는 함수를 가리켜 Pure Function이라고 한다. 예를 들면 get Ammo, greater(>) 등이 있다.
SpaceBar → Branch(HasAmmo?) → Spawn → Ammo--
6-3. 멤버 함수로 발사 로직 BP_Projectile에 캡슐화
- BP_Projectile 열기 → Open Full Blueprint Editor
- Functions 영역 → + → Launch() 생성
- 기존 Add Impulse 로직을 Launch 내부로 이동 (self를 통해 생성된 BP_Projectile을 바로 사용)
- (Main 블루프린트 상에서) SpawnActor 후 바로 Launch 호출되도록 설정
7. 레벨 리로드 & 게임 루프
탄약이 0이면 5 초 뒤 레벨 재시작
Has Ammo?
└─ Branch(Ammo == 0)
└─ Delay(5s)
└─ Get Current Level Name
└─ Open Level
- Delay는 게임 로직 중 동기 전환에 유용하지만 남발에 주의하자.
- 레벨 이름은 하드코딩 대신 함수(Get Current Level Name)로 가져오자.
8. 물리/충돌 버그
기능 | 경로 | 설명 |
Player Collision 뷰 | 뷰포트 좌상단 Lit | 충돌 캡슐 시각화 |
Sub-Stepping | Project Settings → Physics | 고속 물체 충돌 누락 방지, 퍼포먼스 비용을 통한 정확한 물리 시뮬레이션 |
부모-자식 결합 | Details → Parent 아래 부분에 Child로 추가 | 둘을 접착하여 하나처럼 물리 적용 |
너무 빠른 공이 뚫고 지나감 | 속도 제한 or CCD(Continuous Collision Detection) ON | Static Mesh → Collision Settings |