Unity/오버워치 따라잡기

[Unity] 오버워치 따라잡기! 트레이서 편(6) - 기본 공격 장전

_GyC_ 2023. 5. 6. 13:49

정말정말 오래걸려서 트레이서의 기본 공격 이론을 구현했다.

이제는 장전을 구현해볼 것이다.

 

바로 ㄱㄱ


A. 트레이서 기본 공격 분석

Reference 1.

트레이서의 좌클릭 기본 공격에 대한 정보는 위와 같다. 

한 번당 두개의 총알이 나간다던가 수정해야할 정보가 보이지만, 이러한 디테일은 나중에 추가하도록 하자.

 

먼저, 탄창을 40이고 장전 타임은 1초인것만 생각하면 된다.

 

장전에는 두 가지 정도가 있을 것이다.

1. R을 눌렀을 때 장전.

2. 기본 공격을 하는데 탄창이 0일 때 자동으로 장전.

 


B. 탄창 개념 도입

탄창, 장전에 관련된 변수들을 정의해주고 트레이서의 탄창 40개와 장전시간 1초를 설정해줬다.

 

maxBulletNum은 탄창 최대 개수, bulletNum은 현재의 탄창 개수가 될 것이다.

Reloading을 장전 중인 경우 true로 설정하여, 장전 중일 때는 공격을 못하게 하는 등의 제약을 줄 것이다.

전 편에서 구현한 기본공격 함수에 조건을 걸었다.

현재 탄창 개수가 0이 아니어야 하고, 장전 중이지 않을 때 기본 공격을 할 수 있도록 했다.

그리고 기본 공격 한 번에 탄창의 개수를 1 감소시켰다.

(나중에는 한번에 2개를 감소시키도록 해야하고, frame마다가 아닌 정해진 시간마다 기본공격이 가능하도록 설정해야 한다.)

간단한 UI 설정을 통해, bulletNum 변수가 텍스트로써 보이도록 했다.

 

위 영상에서 볼 수 있듯이, 좌클릭시 기본공격이 되면서 탄창의 개수가 줄어든다.

또한 탄창이 0일 때는 기본 공격이 안된다.


C. 장전

 

아까도 언급했지만, 장전에는 두가지가 있다.

1. R을 눌렀을 때 장전.

2. 기본 공격을 하는데 탄창이 0일 때 자동으로 장전.

 

먼저 키보드/마우스 인풋을 받아오는 함수에 RInput을 받아오도록 한다. GetInput 함수는 Update함수에서 호출된다.

RInput이 들어왔고 현재의 탄창 개수가 최대 탄창 개수가 아닐 때 Reload 코루틴을 실행해준다.

최대 탄창일 때는 장전이 필요없다.

 

Reload 코루틴에서는 reloadTime(트레이서 경우에는 1초)간 reloading 변수를 true로 설정해주고, reloadTime이 지나고 다시 false로 설정해준다. 

reloadTime이 지난 후에는 현재의 탄창을 최대 탄창 개수로 바꿔준다.

 

지금까지 탄창이 최대 탄창 개수가 아닐 때 R을 누르면 장전이 되도록 했다.

그러나, 탄창의 개수가 0인 경우에도 R을 눌러야만 장전이 된다.

 

그러나 실제로 게임에서는 탄창이 0인 경우에 기본공격을 하려고 해도 자동으로 장전이 된다.

이것을 구현해보자.

탄창이 0이고 장전 중이지 않을 때 leftClick을 하면 Reload.

탄창이 0이 아니고 장전 중이지 않을 때 leftClick을 하면 탄창 개수 -1, 기본 공격.

 

RInput이 들어왔고, 탄창이 최대 탄창 개수가 아니고, 장전 중이지 않으면 Reload.

 

약간 구조를 가시성 있게 수정을 했다.

 

짜잔! 디버깅 용으로 장전 중일 때 탄창 옆에 'Reloading...' 이라는 텍스트가 뜨도록 했다.

R을 눌렀을 때와 탄창이 0일 때 좌클릭을 하면 장전이 되도록 설정했다.

 

다음에는 트레이서 기본 공격의 디테일을 수정하고, 적의 개념을 도입해보려고한다.

코드 양이 많아지다보니 점점 코드가 지저분해지고 정해진 틀없이 진행이 되는 느낌이라,

코드를 싹다 정리하고 다음 편을 시작해보려고한다.

 

디버깅, UI, health 등등 세분화 및 정리를 해봐야겠다.

 

그럼 다들 즐개~ (즐거운 개발이라는 뜻)

 


Reference

1. https://overwatch.fandom.com/wiki/Tracer