GameplayCue GameplayCue를 이용하여 VFX를 적용하는 방법에 대해 알아보자. GameplayCue(GC)는 시각 이펙트나 사운드 같은 게임 로직과는 관련이 없는 부가적인 기능을 담당한다. GC에는 두 가지 종류가 있다. 스태틱 게임플레이 큐: 일시적으로 발생하는 특수효과에 사용, Excute 이벤트 발동 액터 게임플레이 큐: 일정 기간동안 발생하는 특수효과에 사용, Add/Remove 이벤트 발동 C++로도 구현할 수 있지만 BP로 구현하는 것이 생산적이다. 또한, GE에서 GC와 연동할 수 있도록 기능을 제공하고 있다. 다른 GAS객체들과는 다르게 GC는 GameplayCueManager가 관리한다. 부가적인 기능이라 그런 것 같다. 또한, GC는 GameplayTag를 통해 간단하게..
Game
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..
공격 판정 이전 포스트에서 구현한 콤보 공격에서 공격 판정을 추가로 구현할 것이다. 여태까지의 공격 기능에 흐름은 다음과 같다. 플레이어의 입력에 의해 캐릭터의 EnhancedInput이 감지되어 해당 함수를 실행 사전에 부여한 Ability 중 InputId에 맞는 Ability를 실행 Ability에서 애니메이션을 동작시키기 위해 AT(Ability Task)를 생성하여 실행 AT의 완료 Callback을 받아 마무리 위의 과정에서 애니메이션을 동작하는 부분이 있다. 이는 AnimMontage를 이용하여 애니메이션을 동작한다. GAS에서의 공격판정은 일반적인 UE프로젝트와 다르지 않게 시작된다. AnimMontage에 Notify를 등록하여 원하는 동작에서 공격을 판정하게 할 수 있다. 공격판정을 위..
글의 요약 설명 부분. 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..
인게임 Mesh 변경 프로젝트에서 Item의 Mesh를 동적으로 바꿔야 하는 상황이었다. 에디터에서 플레이할 때는 올바르게 동작하여 그냥 넘어갔었다. 근데, standalone으로 게임을 돌렸을 때, Mesh가 제대로 변경되지 않고 Default Mesh로 고정되어 있었다. 하지만, 특정 Item들만 Mesh가 변경되지 않았고 제대로 변경된 Item들도 있었다. 분석해 보니 Mesh 세팅의 차이가 있었다. Mesh가 변경되지 않는 Item들은 환경 요소로 사용하고 있는 Item들이다. 예를 들면, 채집 가능한 맵에 자라나는 열매나 꽃 같은 것들이 이에 해당한다. 따라서, 이들은 생성된 위치에 고정되어 움직이지 않기를 원했기 때문에 Mesh의 모빌리티를 스태틱으로 설정했었다. 이 부분이 문제가 되어 Mes..