언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

전기 광선 스킬 - 8) 감전 + 기절 상태 부여 (1)

monstro 2025. 11. 29. 13:35
728x90
반응형

- 개요

전기 광선에 피격된 적에게 감전 상태를 부여하면서 전기 광선이 종료되면 기절하는 효과를 추가한다

 

- C++ 사이드

1) CombatInterface 클래스

 

위의 2개의 함수를 추가하여 감전 상태인지 확인 + 감전 상태를 부여한다

 

2) AuraCharacterBase 클래스

 

위와 같이 5개의 멤버변수를 추가한다

각각 다음과 같다

  • bIsStunned : 기절 상태인지 판단
  • StunDebuffComponent : 기절 상태에서 재생할 FX 효과
  • bIsBurned : 화상 상태인지 판단
  • bIsBeingShocked : 감전 상태인지 판단
  • BaseWalkSpeed : 기절 상태에서는 모든 캐릭터가 움직일 수 없어야 하므로 부모 클래스로 이전

 

 

위와 같이 6개의 함수를 추가한다

각각 다음과 같다

  • GetLifetimeReplicatedProps 함수 : 추가한 불리언 변수들Replicate하는 함수
  • SetIsBeingShocked 함수 : 상속받은 함수를 오버라이드
  • IsBeingShocked 함수 : 상속받은 함수를 오버라이드
  • StunTagChanged 함수 : 기절 상태에서 설정되는 Tag를 통해 동작하는 함수
  • OnRep_Stunned 함수 : 기절 상태 Tag변경되면 레플리케이션하면서 호출하는 콜백 함수
  • OnRep_Burned 함수 : 화상 상태 Tag변경되면 레플리케이션하면서 호출하는 콜백 함수

 

 

생성자에 위의 로직을 추가하여 기절 상태에서 재생할 나이아가라 컴포넌트를 설정한다

 

 

GetLifetimeReplicatedProps 함수를 위와 같이 구성하여 불리언 변수들에 대해 레플리케이션을 수행한다

 

 

BeginPlay 함수에 위의 로직을 추가하여 캐릭터의 최대 이동속도를 기본 이동속도로 설정한다

 

 

인터페이스에서 상속된 함수들은 위와 같이 오버라이드한다

 

 

MulticastHandleDeath 함수에 로직을 추가하여 캐릭터가 쓰러지면 기절 상태의 FX 효과를 비활성화한다

 

 

StunTagChanged 함수의 로직은 위와 같다

기절 상태의 Tag추가되면 이동 속도를 0으로 설정하고, 제거되면 이동 속도를 복구한다

 

 

불리언 변수들을 레플리케이션하면서 호출하는 콜백함수들은 위와 같이 비워놓아

자식 클래스에서 원하는 방식으로 오버라이드할 수 있도록 설정한다

 

3) AuraCharacter 클래스

 

부모 클래스에서 상속받은 2개의 함수를 오버라이드한다

 

 

InitAbilityActorInfo 함수에 로직을 추가하여 기절 상태의 Tag추가되거나 제거되면 호출할 함수를 바인드한다

 

 

OnRep_Stunned 함수의 로직은 위와 같다

입력을 막는 Tag들을 저장한 TagContainter를 생성하고

기절 상태가 되면 해당 TagContainter를 적용하면서 기절 상태 FX를 재생하고

기절 상태가 아니라면 해당 TagContainter를 제거하고 기절 상태 FX를 중지한다

 

 

OnRep_Burned 함수의 로직은 위와 같다

화상 상태라면 화상 상태 FX를 재생하고, 아니라면 중지한다

 

4) AuraEnemy 클래스

 

StunTagChanged 함수를 추가하고 오버라이드한다

 

 

생성자에 위와 같이 로직을 추가하여 기본 이동속도를 설정한다

 

 

StunTagChanged 함수의 로직은 위와 같다

부모 버전의 함수를 호출하고 블랙보드 Stunned 키의 값을 설정한다

 

 

InitAbilityActorInfo 함수에 로직을 추가하여 기절 상태의 Tag가 추가되거나 제거되면 호출할 함수를 바인드한다

 

5) DynamicGameplayEffect 클래스

 

GameplayEffect를 임시적으로 생성하여 사용하면 네트워크 동작원할하지 못하는 문제를 수정하기 위해

위와 같이 GameplayEffect 클래스를 생성하였다

멤버함수는 다음과 같다

  • IsSupportedForNetworking 함수 : true를 반환하여 해당 GameplayEffect가 Replicate되도록 설정
  • IsNameStableForNetworking 함수 : true를 반환하여 네트워크 통신에서 일관된 식별자를 가지도록 설정

 

6) AuraAttributeSet 클래스

 

HandleIncomingDamage 함수를 위와 같이 수정하여

데미지를 받은 대상CombatInterface를 상속했으면서 + 대상이 감전 상태가 아니라면

피격과 관련한 GA를 발동하도록 조건을 설정한다

 

 

Debuff 함수를 위와 같이 수정하여

5)에서 생성한 확장한 GameplayEffect 클래스를 생성하여 사용한다

또, 기절 상태 디버프가 적용되었다면 입력을 수행할 수 없도록 Tag를 추가한다

 

 

728x90
반응형