Set Attribute
Player Character, Enemy Character에 속성값을 초기화 하는 과정입니다.
개요
GameplayEffect를 통해 PrimaryAttributes(주 스텟) 에 대한 초기화 진행
구조
Character
ASC
DefaultPrimaryAttributes
적용 과정
Progress
StartUp Data를 보관할 데이터 에셋 생성
Primary, Secondary, Vital 정보를 담는 GameplayEffect를 생성
PossesedBy 시점서 해당 GameplayEffect 적용하여 초기화 실시
코드 변경사항
UPROPERTY(EditDefaultsOnly, Category = "StartUpData")
TArray<TSubclassOf<UGameplayEffect>> StartUpGameplayEffects;
void UDataAsset_StartupDataBase::GiveToAbilitySystemComponent(UKKAbilitySystemComponent* InASCToGive, int32 ApplyLevel){
// 중략
if (!StartUpGameplayEffects.IsEmpty())
{
for (const TSubclassOf<UGameplayEffect>& EffectClass : StartUpGameplayEffects)
{
if (!EffectClass)
{
continue;
}
FGameplayEffectContextHandle EffectContextHandle = InASCToGive->MakeEffectContext();
const AKKCharacterBase* Character = Cast<AKKCharacterBase>(InASCToGive->GetAvatarActor());
EffectContextHandle.AddSourceObject(Character);
const UGameplayEffect* EffectCDO = EffectClass->GetDefaultObject<UGameplayEffect>();
InASCToGive->ApplyGameplayEffectToSelf(EffectCDO, ApplyLevel, EffectContextHandle);
}
}
}
void AKKPlayerCharacter::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
InitAbilityActorInfo();
}
void AKKPlayerCharacter::InitAbilityActorInfo(){
// 중략
if (UDataAsset_StartupDataBase* LoadedData = CharacterStartUpData.LoadSynchronous())
{
if (UKKAbilitySystemComponent* KKAbilitySystemComponent =
Cast<UKKAbilitySystemComponent>(AbilitySystemComponent))
{
LoadedData->GiveToAbilitySystemComponent(KKAbilitySystemComponent, 1.f);
}
}
}
스텟 별 설명
주 스텟
Primary Attribute | 초기값 |
|---|
Strength | 12 |
Intelligence | 9 |
Luck | 5 |
DefensePower | 7 |
Vigor | 9 |
보조 스텟
Secondary Attribute | 계산식 | 설명 |
|---|
Armor | DefensePower * 3 + 5 | 공격을 막아 낼 확률입니다. |
ArmorPenetration | Strength * 0.8 + 2 | 방어구 관통력은 상대의 방어력을 무시하고 데미지를 줄 확률을 뜻합니다. |
CriticalHitChance | Luck * 0.5 + 3 | 치명타 확률입니다. 행운에 따라 상승하며 최소 3%를 보장합니다. |
CriticalHitDamage | Luck * 5 + 200 | 치명타 피해량은 기본적으로 2배의 데미지를 주나 행운에 따라 상승합니다. |
CriticalHitResistance | Armor * 0.5 + 5 | 치명타 저항은 Armor 값에 비례하며, 기본적으로 5%확률을 보장해줍니다. |
HealthRegeneration | Vigor * 0.2 + 2 | 체력 재생은 Vigor에 비례합니다. |
MaxHealth | Vigor * 10 + Strength * 2 + Level * 10 | 최대 체력은 Vigor에 주로 영향을 받고, Strength에 어느정도 영향을받습니다. 레벨이 오를때마다 10씩 상승합니다. |
ManaRegeneration | Intelligence * 0.2 + 1 | 마나 재생은 Intelligence에 비례합니다. |
MaxMana | Intelligence * 10 + Level * 5 | 최대 마나는 Intelligence에 비례합니다, 레벨당 5씩 오릅니다. |
해당 값들은 게임의 밸런스에 의해 일부 조정 될 수 있습니다.
Last modified: 12 December 2024