[UE4] 연사 기능(Auto Fire) - SetTimer, TimerManager
마우스 왼쪽 버튼을 꾹~ 누르고 있으면 총이 연사되도록 연사 기능을 구현해보았다.
⏱ SetTimer
블루프린트에서 사용했던 SetTimer 함수의 정의를 살펴보면 World의 GetTimerManager로 Timer Manager를 불러와서, Timer Manager가 가지고있는 Set Timer 함수를 실행시킨다는 것을 알 수 있다.
따라서 나는 연사모드라면 (bAutoFire == true) GetWorld()로 World를 가져와 동일하게 Get Timer Manager를 다시 가져오고, 그 안에 있는 SetTimer 함수를 바로 사용하였다.
SetTimer 함수를 사용하려면 어떤 Timer를 작동시킬 것인지를 구분하기 위해 식별자인 Handle이 필요하다.
따라서 변수로 FTimerHandle을 하나 생성해준 뒤, 매개변수로 넘겨주고, Set Timer는 델리게이트처럼 사용하므로 this 클래스에 있는 ACWeapon 안에 OnFiring 함수를 실행시키라고 등록해주었다.
이후 InRate 매개변수로 임의의 수치(0.15)를 전달하고, Loop를 true로 설정하여 0.15초마다 OnFiring 함수가 실행되도록 설정하였다. 마지막 매개변수 InFirstDelay는 시작 시간임으로 0을 넣어주었다.
발사가 끝날 때 호출되는 End Fire 함수에서는 Timer가 활성화 되어있다면 ClearTimer 하도록 설정하여 연사중에 연사모드를 종료시키고, 마우스를 떼어 발사를 끝내면 타이머가 더이상 호출되지 않도록 하였다.
연사모드는 생각보다 간단하게 마무리되었다.