과녁은 다음과 같은 기능이 필요함.
Enumeration을 사용하여 과녁의 상태를 지정.

Ready: 누워있으면서 일어날 수 있는 상태
Ready to Standing: 일어나고 있는 상태
Standing: 일어나 있는 상태
Standing to KnockDown: 눕고 있는 상태
KnockDown: 누워있는 상태
Event Graph는 다음과 같이 구성.

StandUp Trigger Volume에 닿았을 경우 StandUp 함수 호출.

목표 각도와 회전 시간 등을 초기화.
KnockDown 함수도 StandUp 함수에서 초기화 값만 다르고 나머지는 똑같음.
이렇게 설정된 값들을 Event Tick에서 Rotate 함수를 호출하여 회전함.



회전 시간이 0보다 클 경우 프레임마다 '총 회전 각도 / 총 회전 시간 * Delta Time' 만큼 회전함.

초록색 원뿔이 StandUp Volume, 빨간색이 KnockDown Volume, 파란색이 Reset Volume이다.
총기 구현을 위해 새로운 Input Action 생성.
Aim, Fire, FireMode, Reload, SwapMain, SwapSub를 생성함.

아직 Asset을 구하지 않았기에 간단하게 Cube를 사용하여 총기를 만듦.

맨 앞부분은 총알이 발사될 Transform.
이 Blueprint를 Character에 추가해야 하는데, 일반적으로는 내가 만든 BP를 Component로 추가하는 것이 불가능함.
이는 Child Actor Component를 Character에 추가하여 Weapon Class로 설정하는 방법으로 Weapon을 부착하면 해결할 수 있음.
Bullet도 간단하게 작은 Sphere를 사용하여 생성.
Bullet이 생성될 경우 Forward 방향으로 이동하도록 노드를 구성. (Physic는 사용 X)


이렇게 만든 Bullet을 Weapon의 Fire 함수에서 총알이 남아있을 경우 Spawn Actor 노드를 사용하여 생성해줌.


기본 최대 총알 수는 30으로 설정함.
마우스 좌클릭 시 총알이 잘 발사되는 것을 볼 수 있음.
이때, Target이 Bullet에 충돌 시 KnockDown 함수가 실행되도록 추가.


Reload는 간단하게 R키를 눌렀을 때, 현재 남아있는 Bullet의 개수를 Max로 다시 초기화해줌.

Print는 테스트를 위해 추가해놓은 것.
발사 방식을 조절하는 기능으로, Full Auto와 Semi Auto 방식으로 발사 가능.
Semi Auto는 기존의 방식이므로 Full Auto만 구현하면 됨.
현재 FireMode를 Enumeration으로 설정하여 현재 FireMode가 Full Auto일 경우 Fire 함수가 끝나고 다시 Fire 함수를 호출하도록 노드를 구성.

이때, Full Auto일 때 마우스를 떼면 예약한 Fire 함수를 취소해야하기 때문에 Timer Handle 변수를 추가하여 버튼 Released 시 호출을 취소함.

B 키를 누르면 ChangeFireMode 함수를 호출하도록 설정.


왼쪽 상단을 보면 현재 남은 총알의 개수와 Reload, FireMode 변경이 모두 제대로 작동하는 것을 볼 수 있음.
게임에서 Main과 Sub 무기를 들고 다닐 것이므로, Weapon을 한 가지 더 만듦.
등 뒤에 부착하고 다니며, Swap 키를 눌렀을 때 해당 무기로 Swap이 가능하도록 함.

무기의 Type을 구별하기 위해 Enumeration을 사용했고, Main <--> Sub 간에 올바른 Type끼리 Swap할 때만 Swap이 되도록 함.

다음으로, Character에서 현재 장착하고 있는 Weapon과 등에 달린 Weapon Actor를 서로 바꾸는 작업을 담당하는 SwapWeapon 함수 생성.
뽑을 Weapon과 넣을 Weapon을 지정하고, Attach Actor To Component 노드를 사용하여 Character가 손에 들고 있는 Weapon과 등에 메고 있는 Weapon을 서로 Swap.

실제 Weapon Actor는 Child Actor에 담긴 Actor를 미리 담아두고 있음.


Weapon을 Swap해도 해당 Weapon의 Bullet, FireMode는 개별로 적용되는 것을 볼 수 있음.

과녁 시스템과 총기의 Fire, FireMode, Reload, Swap 모두 제대로 작동하는 것을 볼 수 있음.