본문 바로가기

Unreal Engine 5/모작프로젝트_OrcsMustDie!3

언리얼 엔진 5 1-4. 총에 총알과 반동 넣기

반응형

 

 

1. 이제 BP_WeaponBase에 가서 모든 무기에 공통적으로 들어가는 총알에 대해서 자세히 다루어보자. 가장 먼저 총알에 필요한 변수들을 만들어보고 

 

 

 

Mag = Magazine : 탄창

이제부터 아래에 만드는 함수들은 이름만 봐도 대충 이해가 갈만한 수준이기 때문에 특별히 어려운 경우가 아니라면 설명을 하지 않도록 하겠다.

 

 

2. 총을 쏘는데 필요한 WeaponFire이라는 Function을 만들어보자

 

 

3. 총을 장전하는데 필요한 WeaponReload를 만들어보자.

 

 

4.  탄창 안에 총알이 있는지 찾는 HaveAmmoInMag 함수를 만들어봤는데, output으로 boolean만 return하므로 pure function으로 만들자. (우측 Details 창에 있는 Pure를 체크하면 된다.)

 

 

5. 추가적인 총알이 있는지 확인하는 HaveExtraAmmo 함수를 만들고 Pure 함수로 바꾸자.

 

 

 

6.  이후 아까 만들어둔 변수들에 적당한 값을 넣어주자 (어차피 각종 무기에서 따로 초기화할거라 Hand 기준으로 넣었다.)

 

 

7. 이제 개별무기로 가보자, BP_WeaponBase_Pistol로 가서 EventGraph에서 WeaponFire와 WeaponReload를 가져와보자. Event Weapon Fire랑 Weapon Reload를 가져온 다음에 우클릭해서 add call to parent function을 통해 부모에 있는 WeaponFire와 reload를 가져온다. 이후에 Fire의 경우 PlayAnimation을 이어주고 Fire_pistol_W를 Play하기로 하자.

 

 

8. Project Settings로 가서 아래와 같은 ACtion을 추가해주자

 

 

 

9 다시 BP_PlayerCharacter로 돌아와서  Reload랑 Fire이라는 Custom Event를 만들어보자.

 

 

10. 이후에 추가한 Input Action을 이용해서 그에 해당하는 일을 하도록 만든다. Reload의 경우에는 앞서 만들어둔 것들을 이용해서 장전중이지 않고 무기를 바꾸는 상황이 아니며 탄창이 꽉 차있지 않은 경우에 Reload하게 만든다.

 

 

11. 이제 Fire event를 만들어보자. 총알이 없는 경우에는 바로 장전으로 넘어가도록 만든다. 그리고 CharacterFireWeapon이라는 Event Dispatcher를 추가로 하나 만들고 Input으로 WeaponType이라는 WeaponType Enum을 받도록 해서 하나 연결하도록 한다.

 

 

12. 이후에 Reload Event를 추가하자.

1) 첫번째 set iscanfire 이후에 Timeline을 추가하여 ReloadingPullDown으로 짓고 (장전을 할때 총을 아래로 내리면서 장전) 이 Timeline안에 Alpha라는 Float Track을 추가하여 (0,0)와 (0.5,1)에 key를 추가하여 두 점을 클릭하고 Auto로 설정한다.

 

2) Alpha를 variable로 promote하여 WeaponPullDownAlpha라고 명명한다.

 

3) 이후 이게 완료 되었을 때 총의 장전시간만큼 Delay를 입히고 끝나면 다시 총을 올려야하니 이를 반복한다.

 

4) WeaponPullUp Timeline은 이전과 반대로 (0.5,1), (0,0)으로 만들면 될 것이다.

 

 

13. EquipWeapon Event의 Isreloading if문 이후에 true일때 설정된 것들을 바꿔주는 부분을 추가했다.

 

 

 

 

 

 

이렇게 하나하나 바꾸는것 다 쓰면 끝이 없을 것 같아서 이제부터는 바꾼 다음에 많이 바뀐 부분을 올리도록 해야겠다. 이거 목적 자체가 나중에 기억안나면 다시 보고 하기 위한거기 때문에 적당히 하면 될 것 같다.

 

 

 

 

 

14. Reload Event

 

 

15. InputAction Fire and Reload

 

 

16. PlayerCharacter_AnimBP로 가서 AnimGraph, Recoil라는 변수 만들고 WeaponPose로 save cache pose

 

 

17. eventGraph로 가서 assign fire character weapon(event dispatcher) 해서 생긴 Event를 FireWeapon으로 만듬

 

 

18. BP_PlayerCharacter StopFire custom event 만들고 이거 추가하기

 

 

19. EventDispatcher 하나 더 만듬 (CharacterStopFireWeapon)

 

 

20. 다시 AnimBP의 event graph

 

 

21. UpdatePlayerActions에서 RecoilAlpha, RecoilRotLoc, RecoilSpeed Float 변수를 만들고 DeltaTimeX를 promote해서 DeltaT를 만들었다.

 

 

22. RecoilIntensity를 WeaponBase에 만들고 RotLoc을 0 ~ -15까지로 만들었따.

 

 

 

끝~~~~~~~~~~이제 총 쏠때마다 Recoil가 조금씩 생길 것 같다.

 

 

-------------------------------------- Extra ----------------------------------------------

Pure Function : 일반적으로 사칙연산 함수 같은 것을 말하ㅡ데, 두 값을 더하거나 빼는 것은 월드에 어떠한 효과를 끼치지 않는 특수 함수를 말한다.

반응형