본문 바로가기

언리얼5/언리얼5 개발

UE5 포트폴리오 1-1 전투스킬구현

플레이어 스킬

 


게임어빌리티 스시템 활용

지난 GAS를 정리한 글을 바탕으로 제 포트폴리오에서 스킬을 구현한 방법을 보여드리겠습니다.

 

글을 통해 알수있는것들

  • 게임어빌리티의 사용법
  • 자신의 스킬연출을 구성한 몽타주 만들기

게임어빌리티시스템 스킬구현

플레이어가 A,S,D,F, Q,W,E,R 스킬들을 누르면 해당 스킬의 위젯의 쿨타임이 실행되고 해당 스킬 시전 mp를 차감합니다.

현제 영상은 테스트를 위해 mp는 0이하에서도 사용이 가능하게끔 구현했습니다.

GAS로 구현된 스킬

 

 

 

구현 로직 설명

플레이어의 스킬은 앞서 말한것처럼 언리얼에서 지원하는 GameAbilitySystem을 적극 활용하여 구현했습니다.
보고계신 글에서 스킬의 구현을 처음부터 끝까지 설명하기에는 어려움이 있기에 전투스킬구현2까지 확인해주시기 바랍니다.

 

 

1. CharacterClass AbilitySystemCompoenet 초기화

 

2. 스킬 구현

 

3. 스킬 발동 시점 정의 및 충돌체 만들기

 


1.  AbilitySystemCompoenet 초기화

메인캐릭터 상위 클래스의 일부 헤더

우선 GAS를 사용하는 대상은 AbilitySystemComponent를 반드시 사용해야합니다.

이는 스킬의 시전뿐만 아니라 추후 다루게되는 GameplayAttribute 플레이어의 스탯을 관리까지 서비스합니다.

결과적으로 ASC는 GAS의 핵심적인 기능입니다.  

 

플레이어 블루프린트

 

보시는것과 같이 StartInput Abilitys 데이터를 보시면 숫자와 "BPGA_"로 시작하는 객체가 정의되어있습니다.

여기서 의미하는 숫자는 UE5의 향상된입력 구현된 입력기능의 a,s,d,f,q,w,e,r의 입력 이벤트가 발생할 시 반환하는 정수의 숫자를 의미합니다.

 

"BPGA_"이는 앞으로 설명하고 구현하게될 GameAbility의 블루프린트입니다.


2.  스킬 구현 

GameAbility 자식 클래스 MainCharacterSkillBase

 

위 GameAbility는 전투시스템에서 매우중요합니다. 이유는 비동기 객채이기 때문입니다.

이는 우리가 사용했던 유니티처럼 발동이 되면 플레이어가 릴리즈 조건을 만들어주지 않는 이상 런타임이 끝날때까지

실행됩니다. 따라서 GameAbility를 발동했고 특정 상황 또는 예외상황을 반드시 체크해야합니다.

 

GA가 무사히 발동되면 몽타주어빌리티 함수가 호출됩니다.

 

몽타주 어빌리티 함수의 역할은 매개변수들을 통해 "원하는 몽타주"의 "특정 섹션"을 "속도"를 지정하여

재생해줍니다. 그리고 몽타주의 재생이 완료되었을 시 호출될 콜백또한 정의합니다.

ReadForActivation을 호출하면 정의된 정보들을 통해 몽타주가 재생됩니다.

 

특정 섹션의 예시 활용은 콤보공격을 사용할 시 대표적으로 사용될 수 있습니다.

한 몽타주에 다수의 섹션을 붙여넣어 사용할수있습니다. 
콤보공격이 가능한 타이밍을 노티파이로 구현하여 콤보공격 이벤트가 발생되면 호출될 섹션의 이름을 다름값으로 반환하여 알려주고 몽타주를 재생해줍니다.

제가 만든 GameAbility의 역할은 해당 GA스킬의 몽타주가 재생됩니다, GA의 정의된 소모마나만큼 플레이어의 mp를 차감합니다. 스킬 발동이후 쿨타임이 재생됩니다. 

플레이어의 MP는 GA GamePlayAttribute로 정의되있어 이번글에서는 다루지않겠습니다.


3. 스킬 발동 시점 정의 및 충돌체 만들기

 

2번까지 진행을 했다면 스킬 몽타주가 재생됩니다.

하지만 적이 존재하더라도 적과 상호작용하기위한 충돌 처리 및 콜라이더 생성이 구현되지않았습니다.

위 영상을 보시면 스킬 애니메이션 타임라인중 GAS라 적혀있는 파란노티파이가 보입니다.

이는 언리얼에서 제공하는 노티파이를 상속받아 구현된 노티파이입니다.


4.  NPC와 상호작용

 

GAS를 활용하여 상호작용이 가능한 NPC를 GAS 태그로 정의했습니다. 이러한 컨텐츠 개발 활용에서도 적극사용가능합니다.

 

4번은 기능이 단순하여 이번글에 같이 포함시켰습니다.

'언리얼5 > 언리얼5 개발' 카테고리의 다른 글

UE Fade 기능 만들기  (2) 2024.04.06
GA 유용한 가상 함수  (0) 2024.03.31
UE Hpbar 만들기  (0) 2024.03.29
UE 헤드업 디스플레이 (공부 정리)  (0) 2024.03.25
UE 아이템 시스템 (공부 정리)  (0) 2024.03.24