Mrhoony / UE4_StillTheyAlive

UE4 [3D, CO-OP] C++Game TeamProject
0 stars 0 forks source link

Create Weapon_RPG #55

Closed Pray34 closed 1 year ago

Pray34 commented 1 year ago

준비한 클래스는 총 4가지이다

CWeapon을 상속받은 'CRocketLauncher.h' 장착시 Aim기능을 위한 'CAimAction.h' 에임액션시 화면에 AimTexture를 그려주기 위한 'CHUD_Aim.h' 이 모든 정보를 받아 최종적으로 Aim과 Attack을 해주기 위한 'CDoAction_Fire'

  1. CRocketLauncher RocketClass

RocketLauncher 클래스는 사실 Player한테 Attach를 해주기 위한 껍데기이다 구현되어있는 기능은 없다

  1. CAimAction image

CAimAction 클래스는 Timeline을 이용한 에임액션이다 Timeline에 쓰이기 위한 CurveFloat타입의 멤버변수에 BP로 만든 커브경로를 넣어주고 TimelineFloat에 Zoom함수를 바인딩해주고 Timeline에 준비해둔 Curve와 TimelineFloat을 Add시켜준다 Zoom함수는 Curve의 값을 읽어와 내부에서 Owner의 카메라 FOV 값을 설정해주는 함수다 On함수에서 Owner의 SpringArm을 읽어와 에임중인 느낌을 주기위한 값을 설정해주고 Timeline을 PlayFromStart로 실행한다 Off함수는 On에서 설정한 값을 다시 원상태로 복구시키고 Timeline을 ReverseFromEnd로 실행한다

  1. CHUD_Aim image

CHUD_Aim 클래스는 AimAction에서 On함수가 호출되면 화면에 AimTexture를 그려주고 Off함수가 호출되면 지우는 클래스다

4.CDoAction_Fire image

우선 DoAction_Fire의 Tick함수에서 AimAction의 Timeline사용을 위한 DeltaTime을 넣어준다

DoAction_L은 Player가 마우스왼쪽 클릭시에 호출되는 함수인데 여기서 OwnerPlayer의 Montage를 플레이 해주고 Begin_DoAction함수를 호출한다 현재 Notify가 미비된 상태여서 임시로 Begin_DoAction을 바로 호출하도록 만든상태이다 Begin_DoAction에서는 ProjectTile을 가진 ThrowObject를 SpawnDeffered로 생성해준다 ThrowObject는 BeginOverlap딜리게이트 변수를 가지고있는데 여기다 OnThrowBeginOverlap함수를 Bind해준다

DoAction_R에서는 AimAction의 On함수를 호출하고 DoOffAction_R에서는 Off함수를 호출한다

ABortByActionTypeChanged함수는 현재 Aim을 사용하는중에 무기를 바꿀경우, 에임이 Off되지 않고 무기가 바뀌는 버그를 방지하기 위한 함수이다

OnThrowBeginOverlap는 위에서 Overlap변수에 바인딩된 함수다 image

여기서 실질적인 데미지를 입히는 함수가 호출된다 딜리게이트 파라미터로 HitResult를 받게 되어있어서 충돌한 물체정보를 Local에 먼저 저장해준다 그리고 ThrowObject가 범위형피해를 입히는 물체인지 아닌지 분기를 태워준다 범위형피해라면 ApplyRadialDamage를 호출하고 아니라면 ApplyDamage를 호출한다

하지만 이건 데미지를 보내는 함수부분이고 정상적인 작동을 위해서 데미지를 받는부분도 만들어줘야한다

image

Apply로 데미지를 받은 Enemy 클래스에서 정상작동을 위한 TakeDamage를 override로 재정의한 함수이다 Apply가 실행됬다면 TakeDamage의 파라미터중 DamageEvent의 IsOfType으로 Apply함수가 Any인지 Point인지 Radial인지 판별이 가능하다 만약 ID값이 Radial이라면 AddImpulse를 사용하게 만들었다

하지만 지금 이부분이 버그가 있다 아직 완성되지 않은 부분이라 고쳐할 점이 몇가지 있다

첫째로 데미지를 주기 시작하면 AddImpulse가 몇번 호출되고 나서 TakeDamage 함수 자체가 실행이 되지않는다 Apply는 계속 호출되지만 TakeDamage는 먹통이된다. 이유를 아직 모르겠다

둘째로 지금 범위형 피해가 정상작동되는지 테스트를 못해봤다 데미지가 들어가긴하지만 탄착지점의 외곽지점에서 감소된 피해를 받는지 안받는지 확인을 못했다