[Unreal] 10일차 - 총알 생성과 발사, 충돌과 겹침

2024. 7. 26. 01:51Unreal Engine

728x90
반응형

총알 발사하기

사용자가 발사 버튼을 누르면 총알을 발사하게 만들어야 한다. 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]로 생성한다.

728x90
반응형