1. res up => armor up 구현위해
res가 바뀔때마다, armor가 바뀐다
구현 : Infinity GE를 만들면 됨
2.캐릭베이스에 Secondary속성추가
when사용? : 기본속성에 의존 -> 기본속성이 set된 이후 실행이 바람직함
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Attributes")
TSubclassOf<UGameplayEffect> DefaultPrimaryAttributes;
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Attributes")
TSubclassOf<UGameplayEffect> DefaultSecondaryAttributes;
3. 속성 초기화 함수 구현
void AAuraCharacterBase::InitializePrimaryAttributes() const
{
check(IsValid(GetAbilitySystemComponent())); //ASC확인
check(DefaultPrimaryAttributes); //GE확인
//1. Context Handle 만들기
const FGameplayEffectContextHandle ContextHandle = GetAbilitySystemComponent()->MakeEffectContext();
//2. Effect Spec 만들기
const FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(DefaultPrimaryAttributes, 1.f,ContextHandle);
GetAbilitySystemComponent()->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
}
void AAuraCharacterBase::InitializeSecondaryAttributes() const
{
check(IsValid(GetAbilitySystemComponent())); //ASC확인
check(DefaultSecondaryAttributes); //GE확인
//1. Context Handle 만들기
const FGameplayEffectContextHandle ContextHandle = GetAbilitySystemComponent()->MakeEffectContext();
//2. Effect Spec 만들기
const FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(DefaultSecondaryAttributes, 1.f,ContextHandle);
GetAbilitySystemComponent()->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
}
* 문제 : 반복되는코드가 많음 -> 매개변수로(class, level 빼서 통합)
4. 리팩토링
void AAuraCharacterBase::ApplyEffectToSelf(TSubclassOf<UGameplayEffect> GameplayEffect, float Level) const
{
check(IsValid(GetAbilitySystemComponent())); //ASC확인
check(GameplayEffect); //GE확인
//1. Context Handle 만들기
const FGameplayEffectContextHandle ContextHandle = GetAbilitySystemComponent()->MakeEffectContext();
//2. Effect Spec 만들기
const FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(GameplayEffect, Level,ContextHandle);
GetAbilitySystemComponent()->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
}
void AAuraCharacterBase::InitializeDefaultAttributes() const
{
ApplyEffectToSelf(DefaultPrimaryAttributes, 1.f);
ApplyEffectToSelf(DefaultSecondaryAttributes, 1.f);
}
5. 캐릭터에서 리팩토링한 함수로 함수교체
// 능력 시스템 액터 정보를 초기화하는 함수
void AAuraCharacter::InitAbilityActorInfo()
{
...
InitializeDefaultAttributes(); //정보
}
6. 에디터에서 Infinity GE 만들면됨
7. Res변경시 armor도 자동변경되는가? Yes!
armor가 Infinity이기때문에, Res가 오르면 , armor도 오른다.
8. 실습
*단점 : 속성이너무많아 화면에 안나옴
*해결 : 속성위젯 (다음챕터)
'UE5 > RPG Attributes' 카테고리의 다른 글
[UE5] 커스텀 속성계산2, null 객체생성방법, mmc클래스 (0) | 2024.06.07 |
---|---|
[UE5] 커스텀 속성계산1, 레벨 구현 (0) | 2024.06.07 |
[UE5] 속성 정의, 보조속성 추가하기 (0) | 2024.06.07 |
[UE5] 수정자 Coefficient, pre ,post 이해 (0) | 2024.06.07 |
[UE5] GE :: 속성자 연산이해 // 앞의결과에 연산됨 (0) | 2024.06.07 |