언리얼 스터디를 시작했다.

발사체를 스폰시켜 발사하는 언리얼 토이 프로젝트를 구현해보면서 익힌 기본적인 내용들

 

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 입력 시 현재 카메라 전방으로 탄환을 발사

  1. SpawnActor BP_Projectile
    • Spawn Transform → Player 위치(Get Player Pawn)에 대한, GetActorLocation/Rotation 연결
  2. Add Impulse: SpawnActor에서 return 된 BP_Projectile을 Get StaticMeshComponent로 받아서 Add Impulse 한다.
    • Target : Static Mesh Component(해당 메시에 힘을 가하라는 것)
    • Impulse : GetForwardVector * 4000
  3. 흰색 실행선 SpawnActor → Add Impulse: [2. ...]에서 구현된 내용 참고

 

6. 변수/함수·OOP 패턴

6-1. Ammo 변수 만들기

  1. My Blueprint 패널 → + Variable → Ammo (Integer)
  2. Compile → Details 패널에서 기본값(ex) 20) 설정
  3. 그래프에 드래그 → 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에 캡슐화

  1. BP_Projectile 열기 → Open Full Blueprint Editor
  2. Functions 영역 → + → Launch() 생성
  3. 기존 Add Impulse 로직을 Launch 내부로 이동 (self를 통해 생성된 BP_Projectile을 바로 사용)
  4. (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

 

 

9. 구현 영상

https://youtu.be/raoWhamJRyE