ASC에서 GE를 발동시켜서 초기 스탯을 GE로 지정하게 할 수 있다.

레벨별로 사용할 Stat을 Data Table에 넣어준다.

이렇게 Blueprint를 제작하면 된다.
Override를 사용해서 값을 덮어쓰도록 하고
Scalable Float에서 CharacterStatTable을 넣고 어떤 열을 사용할 것인지 넣으면 Preview가 나온다.
옆의 1.0의 값은 몇배로 할 것이냐이다. 즉, 1.0배 그대로 적용한다는 의미이다.
이제 이 GE를 시작할 때 적용해보자.
이펙트를 발동시키는 코드가 복잡해서 어떻게 동작하는지 확인해보자.
게임 플레이 이펙트의 생성 과정
- 게임플레이 이펙트 컨텍스트와 게임플레이 이펙트 스펙을 통해 생성가능하다.
게임플레이 이펙트 컨텍스트
- GE에서 계산에 필요한 데이터를 담은 객체
- 가해자(Instigator)
- 가해 수단 (Causer)
- 판정 정보(HitResult) 등
게임플레이 이펙트 스펙
- GE에 관련된 정보를 담고 있는 객체
- 레벨, 모디파이어 및 각종 태그에 대한 정보
- 게임플레이 이펙트 컨텍스트 핸들
위와 같은 데이터들을 ASC는 핸들 객체를 통해 간접적으로 관리한다.
GameplayEffectSpec은 GameplayEffectSpecHandle을 통해서 관리가 되고
GameplayEffectContext은 GameplayEffectContextHandle에 의해서 관리가 된다.
(위 글을 보면 알겠지만 GameplayEffectContextHandle은 GameplayEffectSpec안에 있다.)
따라서 이펙트 컨텍스트 핸들을 만든 후, 이펙트 스팩 핸들 생성하는 순서로 진행되어야한다.
(안에서 부터 바깥쪽 방향으로 생성을 해야 이펙트를 발동시킬 수 있다.)
이 두가지 모두 있어서 GE를 발동시킬 수 있다.
이제 헤더와 cpp을 보자.
먼저 헤더이다.
UPROPERTY(EditAnywhere, Category = "GAS")
TSubclassOf<UGameplayEffect> InitStatEffect;
//현재 레벨을 담을 변수
UPROPERTY(EditAnywhere, Category = "GAS")
float Level;
헤더에는 발동시킬 Effect를 넣을 변수와 Level을 담을 변수 두가지를 선언한다.
void AABGASCharacterNonPlayer::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
ASC->InitAbilityActorInfo(this, this);
//먼저 EffectContextHandle을 제작한다.
//ASC에서 MakeEffectContext를 하면 바로 반환을 해준다.
FGameplayEffectContextHandle EffectContextHandle = ASC->MakeEffectContext();
//어떤 Object에 의해서 Effect가 발동되었는지 데이터를 넣는다.
EffectContextHandle.AddSourceObject(this);
//SpecHandle이 만들어진다.
//여기서 Level은 스케일링 레벨(ScalableFloat)을 의미한다.
//EffectSpecHandle의 내부 데이터로 EffectContextHandle를 넣는다.
FGameplayEffectSpecHandle EffectSpecHandle = ASC->MakeOutgoingSpec(InitStatEffect, Level, EffectContextHandle);
if (EffectSpecHandle.IsValid())
{
//자기자신에게 Effect를 적용한다
ASC->BP_ApplyGameplayEffectSpecToSelf(EffectSpecHandle);
//BP_가 없는 함수는 const가 들어가서 BP_가 있는 걸 사용한다.
//C++내에서 사용한다면 둘 다 결과는 동일하다.
//ASC->ApplyGameplayEffectSpecToSelf()
}
}
그리고 ASC를 생성한 이후에
순서에 알맞게 ContextHandle을 제작해주고 데이터를 넣는다.
해당 AddSourceObject말고도 위에 적었듯이 Insitgator, HitResult 등 다양한 값을 넣을 수 있다.
그리고 EffectSpecHandle을 생성할 때 실행할 Effect, Level, 사용할 데이터가 담긴 ContextHandle을 넣어준다.
이 SpecHandle이 유효하다면 실행시켜준다.

이렇게 알맞게 InitStatEffet에 실행할 Effect를 넣고 Level을 넣어주면

Level 3에 맞는 200의 값이 들어간 것을 확인할 수 있다.
'Unreal 게임 개발 > Unreal 강의 개인 정리' 카테고리의 다른 글
| Attribute Set을 활용한 사망 처리 - GAS (0) | 2025.08.25 |
|---|---|
| Attribute Set UI로 표시 - GAS (0) | 2025.08.25 |
| 레벨과 커브 테이블 & 연속 공격 공격력 변화 - GAS (2) | 2025.08.25 |
| 메타 어트리뷰트 - GAS (1) | 2025.08.24 |
| 게임플레이 이펙트 & Modifier (+예시) - GAS (0) | 2025.08.24 |