광역 공격 & Cost & Cooldown GAS에 대한 마지막 포스팅이다. 지금까지 언급한 GAS 클래스들을 이용하여 광역 공격 스킬을 구현하고 해당 스킬을 사용하는데 필요한 코스트와 해당 스킬에 쿨다운을 걸 수 있는 방법을 구현할 것이다. 기본적인 흐름은 다음과 같다. 캐릭터가 무기를 획득하면 스킬을 사용할 수 있는 GA를 부여한다. 마우스 우클릭 입력을 추가하고 해당 입력이 들어오면 앞서 부여했던 스킬 GA를 실행한다. GA에서는 스킬 애니메이션을 실행할 AT를 생성한 뒤 실행 요청을 한다. Montage를 통해 애니메이션이 실행되면 Event와 태그를 통해 공격 판정 GA를 실행한다. 공격 판정 GA는 스킬에 적중한 액터를 판별할 AT를 생성한 뒤 실행 요청을 한다. 판정 AT에서는 TA를 만들어..
이득우
GameplayCue GameplayCue를 이용하여 VFX를 적용하는 방법에 대해 알아보자. GameplayCue(GC)는 시각 이펙트나 사운드 같은 게임 로직과는 관련이 없는 부가적인 기능을 담당한다. GC에는 두 가지 종류가 있다. 스태틱 게임플레이 큐: 일시적으로 발생하는 특수효과에 사용, Excute 이벤트 발동 액터 게임플레이 큐: 일정 기간동안 발생하는 특수효과에 사용, Add/Remove 이벤트 발동 C++로도 구현할 수 있지만 BP로 구현하는 것이 생산적이다. 또한, GE에서 GC와 연동할 수 있도록 기능을 제공하고 있다. 다른 GAS객체들과는 다르게 GC는 GameplayCueManager가 관리한다. 부가적인 기능이라 그런 것 같다. 또한, GC는 GameplayTag를 통해 간단하게..
UI연동 이전 포스팅에서 GE를 통해 Attribute에 영향을 주는 것까지 구현하였다. 이번 포스팅에서는 Attribute가 GE에 의해 변경되면 UI가 업데이트되도록 구현해 보자. 그러기 위해서는 Helath값을 나타내는 UserWidget을 생성하고 이를 캐릭터에 붙일 수 있게 WidgetComponent를 제작하여 진행할 것이다. UserWidget에서는 ASC로부터 Attribute가 변경될 때 Delegate를 받아 업데이트할 수 있게 구현할 예정이다. UserWidget & WidgetComponent 제작 캐릭터에 HpBar를 붙이기 위해 WidgetComponent가 필요하다. UserWidet에서는 Attribute가 변경될 때마다 업데이트되어야 하기 때문에 캐릭터의 ASC가 있어야 한..
GameplayEffect 이전 포스팅에서는 Ability에서 AttributeSet의 값을 직접 바꿨다. 이번에는 GameplayEffect를 사용하여 Attribute를 변경해 보자. 이전과 동일하게 공격 판정을 통해 공격에 적중한 타깃에게 피해를 주어야 한다. 여기서 GameplayEffect를 적용하여 간편하게 피해를 주는 로직을 구현할 수 있다. GameplayEffect GameplayEffect(GE)란 게임에 영향을 주는 객체이다. 즉, 게임에 필요한 데이터에 영향을 주는 객체를 말한다. 예를 들어, 지금의 경우 공격에 적중한 타깃의 Health값을 깎아주어야 한다. 이때, Health값을 변경하는 역할을 하는 객체가 GE이다. GE는 보통 AttributeSet과 함께 동작하도록 구성되어..
AttributeSet 이전 포스팅에서는 공격 판정에 대한 내용을 다뤘다. 공격 판정이 완료된 후, 결과를 타깃에게 적용해야 한다. 보통 공격에 맞은 대상은 체력이 깎이게 된다. 또한, 얼마나 피해를 줄지에 대한 기준이 되는 정보가 필요하다. 이러한 Stat같은 데이터들을 쉽게 다룰 수 있게 해주는 AttriubuteSet이다. 이번 포스팅에서는 AttributeSet을 통해 공격에 적중된 Actor에게 피해를 입히는 예시를 구현해 보겠다. AttributeSet 설명 AttributeSet은 단일 어트리뷰트 데이인 GameplayAttributeData의 묶음이다. GameplayAttributeData는 두 가지 값으로 구성되어 있다. BaseValue: 기본 값, 영구히 적용되는 값 CurrentV..
글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어 콤보 공격 지난 포스팅에 이어 GAS를 통한 캐릭터 입력을 처리하는 부분에서 콤보 공격까지 가능하게 구현하는 것이 이번 목표이다. 이전과 크게 다르지 않다. InputPressed가 있을 때, 시간 내에 들어온 입력인지 확인하기만 하면 된다. 동작 원리는 다음과 같다. AT가 Activate될 때 콤보를 체크할 타이머를 발동시킨다. InputPressed가 실행되면 콤보타이머가 유효하다면 콤보 여부를 true로 설정한다. 타이머가 발동되면 콤보 입력이 들어왔는지를 체크한다. 입력이 들어왔다면 타이머를 다시 발동하고 그렇지 않다면 해제하고 종료한다. 콤보 애니메이션 콤보 공격..
캐릭터 입력 GAS를 이용하면 원하는 시점에 부여한 Ability를 실행시킬 수 있다. 이를 캐릭터 입력에 적용하는 법을 알아보자. UE5는 기본적으로 EnhancedInput을 이용하여 캐릭터에서 입력을 처리한다. 샘플 프로젝트를 열어보면 캐릭터에 점프까지 구현이 되어 있을 것이다. 이번 예시에서는 GAS를 이용하여 점프나 공격 같은 특수한 행동을 실행하도록 설계할 것이다. 물론 캐릭터에서도 구현할 수 있지만 그렇게 하면 캐릭터 클래스의 코드가 방대해져 관리가 힘들 수 있다. 또한, 특수한 기능이나 효과를 넣고 싶을 때 불필요한 의존성이 발생할 수도 있다. 따라서, GAS를 통해 Ability로 분리하여 관리하는 것이 효과적일 것이라는 생각이 든다. 캐릭터 설계 GAS를 적용하려면 AbilitySyst..
GAS 동작원리 GAS를 적용하기 위해서는 기본적인 규칙을 지켜야 한다. GAS를 적용할 액터에 AbilitySystemInterface의 GetAbilitySystemComponent()를 구현해야 한다. GetAbilitySystemComponent에서는 액터가 소유한 ASC(AbilitySystemComponent)를 return 해줘야 한다. 이렇게 설정된 ASC에 Ability를 부여하고 원하는 타이밍에 Ability를 발동시키면 된다. 간단한 예를 들어보자. 어떤 액터가 게임이 시작함과 동시에 계속하여 반복하는 행위를 한다고 가정해보자. 그렇다면 반복되는 행위를 Ability로 만들고 BeginPlay나 특정한 시점에 Abiltiy를 활성화시키면 된다. 예시 앞에서 말한 대로 예시를 만들어보자..
GAS란? GAS란 Game Ability System의 줄임말로 액터가 소유하고 발동할 수 있는 어빌리티 및 액터 간의 인터렉션 기능을 제공하는 프레임워크이다. GAS는 데이터를 기반으로 동작하며 모듈화되어 확장성이나 유연성이 좋다. 또한, 네트워크 멀티플레이를 지원하기도 한다. 이러한 이유로 GAS는 게임을 보다 효율적으로 제작할 수 있도록 해준다. GAS 구성 요소 GAS의 핵심 요소는 위의 사진과 같다. 각각의 요소들이 어떠한 역할을 하는지 간단하게 정리하면 다음과 같다. ASC: Ability System을 관리하는 중앙처리장치 같은 역할을 한다. Tag: GAS를 간편하게 관리하게 해주는 구분자 GA: 게임 내에서 일어나는 액션 GE: GA의 결과로 Attibute에 주는 영향 Attribut..