https://www.unrealengine.com/marketplace/ko/product/action-rpg?sessionInvalidated=true
일단 플레이어의 어빌리티 중 하나인 Melee Attack이 어떻게 수행되는지 보자.
GA_PlayerAxeMelee을 보면 위처럼 되어있다. GA_PlayerAxeMelee은 GA_MeleeBase의 자식 클래스이다. Montage to Play는 GA_MeleeBase에서 넘어온 것이다. 또, GA_MeleeBase는 GA_AbilityBase의 자식 클래스이다. 또, GA_AbilityBase는 RPGGameplay_Ability의 자식 클래스이다. GA_MeleeBase는 여러가지 RPGGameplay_Ability의 자식 클래스들 중에서 Melee 어빌리티와 관련된 어빌리티만 파생시키기 위해서 만들어둔 블루프린트인 걸로 보인다.
일단 GA_MeleeBase를 보자.
Play Montage and Wait for Event는 C++에서 설정한 프로젝트의 커스텀 어빌리티 태스크이다. 이 태스크는 몽타주를 실행하면서 게임플레이 이벤트를 어빌리티가 받을 수 있도록 해준다. 옆을 보면 OnBlendOut, OnInterrupted, OnCancelled는 EndAbility를 호출하고 이벤트를 받았을 경우 Apply Effect Container를 호출하는데, 이 함수는 C++에 정의되어 있다. 이건 나중에 설명하겠다.
일단, Montage to Play에서 세팅해놓은 AM_Attack_Axe를 보자.
노티파이를 보면 작게 W로 되어있는 것이 Weapon Attack NS이다.
이 노티파이의 디테일 창을 보면 Max Attack Delay Count와 Attack Delay Time, Event Tag를 설정할 수 있다. 이 노티파이 블루프린트를 열어보면
형변환을 통해 Owner의 CurrentWeapon의 Event Begin Weapon Attack을 몽타주에서 설정한 파라미터와 같이 호출하는 것을 볼 수 있다. 이 함수를 열어보면
넘겨준 파라미터로 WeaponActor의 변수를 세팅하고 콜리전을 바꿔준다. 이 때 오버랩되면
게임플레이 이벤트를 만들어서 어빌리티로 전달한다. 만들 때, 인스티게이터는 때리는 액터이며 타겟은 오버랩된 액터이다. 게임플레이 이벤트를 보낼 때, 태그는 몽타주에서 설정한 이벤트 태그이다. 이 이벤트는 GA_MeleeBase의 Play Montage and Wait for Event로 가서 Apply Effect Container을 호출시킨다.
Apply Effect Container는 RPGGameplayAbility클래스에 있다. 여기서는 넘겨받은 ContainerTag, 즉 우리가 몽타주에서 설정한 이벤트 태그가 넘어와서 GA_PlayerAxeMelee에서 설정한 Effect Container Map의 키 값이 되어 같이 설정해준 게임플레이 이펙트가 타겟에게 적용된다. 여기서는 설정한 GE_PlayerAxeMelee 이펙트가 적용된다.
Calculation Class로 설정한 RPGDamageExecution에 의해서 데미지 계산이 이루어진다. 여기서는 캡쳐를 통해 데미지를 주는 Source의 어트리뷰트에서 AttackPower, Damage를 가져온다. 타겟에서는 DefensePower을 가져온다. Damage는 GE_PlayerAxeMelee에서 설정한 값으로 설정된다.
'Unreal Engine > 기타' 카테고리의 다른 글
[UE] Variable Replication (0) | 2023.12.17 |
---|---|
[UE] Network Role (1) | 2023.12.17 |
[UE] ServerTravel과 ClientTravel (0) | 2023.12.08 |
[UE] ThisClass (0) | 2023.12.02 |
[UE] UE4와 액션 RPG를 이용한 게임 제작 배우기 (0) | 2023.05.20 |