2024. 7. 26. 01:51ㆍUnreal Engine
총알 발사하기
사용자가 발사 버튼을 누르면 총알을 발사하게 만들어야 한다. Object Pooling을 이용한다.
BP_Bullet이 총알 공장이 된다.
발사 버튼 입력 받기
[Project Settings...] - [Input] - [Action Mappings]에 + 키를 눌러 "Fire" 이름으로 새로 추가한다.
Action 입력은 단발성, Axis 입력은 지속성 입력을 받는다.
키보드 버튼 누르고 마우스 왼쪽 버튼 눌러서 마우스 왼쪽 버튼을 입력한다.
"BP_Player" 더블클릭해서 연다.
"Fire" 입력해서 노드 추가.
"spawn"을 검색하여 [Spawn Actor from Class] 노드 추가.
[Class] 부분에 "BP_Bullet"을 설정하여 총알이 생성되도록 설정하고 [Pressed]와 연결하여 Compile하면 오류가 생긴다.
[Spawn Transform]이 아직 연결되지 않았기 때문.
해당 Transform을 Split하면 에러는 뜨지 않는다.
누르는 대로 나오긴 하지만 아직 플레이어의 이동에 따라서 스폰 지점이 변화 되지는 않는다. 거슬리니까 Enemy 복제한 건 지운다. 그리고 총알도 누를 때 생성되어야 하기 때문에 "BP_Bullet"도 [Outliner]에서 지운다.
총구에서 총알이 생성되게 하기
[+Add] 버튼 누르고 "Scene" 검색하여 추가
이름은 "FirePosition"으로 변경
총알이 위쪽에서 생성될 수 있도록 기즈모를 잡고 위로 끌어올렸다.
다시 [Event Graph]로 돌아와서, [Fire Position]을 끌어다 놓아 노드를 생성하고, [Get World Location] 노드를 잇고, [Spawn Transform Location]과 아래 사진처럼 이으면,
플레이어의 위에 총알이 생성되는 것을 볼 수 있다. 이 방식은 오브젝트 풀링에 비해서는 최적화가 되지 않는 방법이다.
충돌 구현
[Project Settings...] - [Engine] - [Collision] - [Preset] 부분을 보면 미리 충돌 처리가 정의되어 있는 것을 볼 수 있다.
리스트 중 하나를 더블클릭하면 창이 하나 뜨는데 Ignore, Overlap, Block 설정 체크를 볼 수 있다.
[Object Channels] : 그룹으로 묶어줌.
채널을 하나 추가하면,
팝업창 가장 아래에 생성했던 그룹을 볼 수 있다.
블루프린트 메인 화면에서 오른쪽 [Collision]을 보면 [BlockAllDynamic]으로 Preset 설정되어 있는 것을 볼 수 있다.
BP_Enemy도 마찬가지로 똑같은 설정이 되어있다.
설정은 잘 되어있지만 플레이어와 적이 충돌하지는 않는 상황.
BP_Enemy에서 경로 바꾸고 [Sweep] 체크.
BP_Enemy의 Cube를 루트로 올린다.
BP_Player에서 [Sweep] 체크.
위의 설정을 다 하면 그제야 충돌이 된다.
*Block을 하기 위한 조건
1. 충돌 컴포넌트가 Root Component여야 한다.
2. Set Actor Location으로 이동할 때 [Sweep]이 활성화 되어 있어야 한다.
BP_Enemy의 이동을 끊고,
오른쪽에서 [Physics] - [Simulate Physics] 체크를 하면,
물리가 적용되는 것을 볼 수 있다.
BP_Enemy 노드 다시 원복, [Sweep] 체크 해제
On Begin Overlap, On End Overlap
Overlay 이벤트는 Enemy에게만 넣는다. Player와도, Bullet과도 충돌해야 하기 때문.
Cube를 선택한 상태로 [Details] 아래쪽에 + 모양이 많은 곳에서 [On Component Begin Overlap]을 눌러 추가한다.
Enemy가 다른 오브젝트와 부딪혔을 때 그 오브젝트와 Enemy 둘 다 없어져야 하기 때문에 [Destroy Actor]를 추가한다. 하나 복사해서 뒤에 붙이면 타겟이 나 스스로가 된다.
Enemy가 Overlap이 되어야 다른 오브젝트와 튕겨져 나가지 않고 겹쳐진다.
[Simulate Physics] 꺼서 다시 원복.
[Collision Presets] - [OverlapAll]로 바꿔서 겹쳐지게 만든다.
부딪혀서 겹쳐졌을 때 둘 다 없어진다.
적 생성하기
이제 Enemy도 따로 생성할 것이기 때문에 [Outliner]에서 BP_Enemy를 지운다.
눌렀을 때 생성되는 총알과는 달리, 적은 알아서 생겨야 하기 때문에 블루프린트를 하나 더 만든다.
입력을 받을 것은 아니기 때문에 [Actor]로 생성한다.
'Unreal Engine' 카테고리의 다른 글
[Unreal] 12일차 - 적 모델링 교체, 적끼리 충돌 방지, 트리거 박스, 적이 나를 보면서 오도록 수정, 사운드 추가, 폭발 이펙트, 배경 스크롤 (0) | 2024.07.30 |
---|---|
[Unreal] 11일차 - 일정시간에 한 번씩 적 만들기, 적이 플레이어 따라오게 설정, 초반 방향만 따라오게 설정, 확률 추가, 플레이어 모델링 교체 (0) | 2024.07.28 |
[Unreal] 9일차 - 총알 생성, 총알 이동, 적 생성, 적이 플레이어 따라다니기 (0) | 2024.07.25 |
[Unreal] 8일차 - 블루프린트 조건문, 반복문, 함수, 상하좌우 이동 (0) | 2024.07.20 |
[Unreal] 7일차 - 블루프린트 (0) | 2024.07.19 |