< 양손 도끼 >
- 공격 적중 및, 패링 성공시 무기 게이지가 증가함
- 무기게이지가 최대치(100) 도달 시 게이지를 0으로 초기화 하고 특수 능력 재화를 획득(UI표기)
- 특수 능력 사용 키를 입력하여, 현재 있는 재화를 전부 사용, 하고 특수 공격을 발동
< 쌍검 >
- 공격 적중 및 패링 성공 시 무기 게이지 증가
- 무기 게이지가 가득 차면, 특수 능력 키를 입력하여, 검 형태 변환
- 검 형태 변환 시 특수 능력 게이지가 점차 감소 하도록 함.
- 게이지가 0이 되면 원래 형태로 원복 됨
- 형태가 변환 된 도중에는 회피모션이 변경되고, 저스트 판정 성공시 소량 회복 함
< 검 & 방패 >
- 특수 능력 키를 누르면 가드 패리 작동(일반 패링과 달리 방패로 패링을 함).
- 가드 패리 성공 시 방패 Gage 증가, 공격 및 패링 성공 시 무기 Gage증가
- 방패 Gage가 최대인 상태에서 가드 패리 성공 시 적에게 데미지를 주고, 기절 치를 상승 시킴
- 무기 Gage가 최대인 상태에서 파생 공격 or 강 공격 시 추가 데미지 및 기절 치 증가 상승
- 방패로 공격하는 강공격은 기본적으로 기절치를 가짐
< 공통 스탯>
- HP, MaxHP(체력, 최대 체력)
- StunGage (기절 게이지)
< 플레이어 전용 스탯>
- SP, MaxSP(스태미나, 최대 스태미나)
- WeaponGage (무기의 특수 능력 게이지)
- WeaponCount (양손 도끼 특수 능력 재화) - 양손 도끼
- ShieldGage (방패의 특수 능력 게이지) - 검&방패
< 적 전용 스탯 >
- PartHP 1~2 (부위 파괴를 위한 HP) 최대 2개까지 적용 할 수 있도록 구현.
🎮 UBFAttributeSet.h
UCLASS() class BOSSFIGHT_API UBFAttributeSet : public UAttributeSet { GENERATED_BODY() public: UBFAttributeSet(); virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data)override; UPROPERTY(BlueprintReadOnly, Category = "Health") FGameplayAttributeData CurrentHP; ATTRIBUTE_ACCESSORS(UBFAttributeSet, CurrentHP) UPROPERTY(BlueprintReadOnly, Category = "Health") FGameplayAttributeData MaxHP; ATTRIBUTE_ACCESSORS(UBFAttributeSet, MaxHP) UPROPERTY(BlueprintReadOnly, Category = "Stun") FGameplayAttributeData CurrentStun; ATTRIBUTE_ACCESSORS(UBFAttributeSet, CurrentStun) };🎮 UBFAttributeSet.cpp
UBFAttributeSet::UBFAttributeSet() { InitCurrentHP(1.0f); InitMaxHP(1.0f); InitCurrentStun(0.0f); } void UBFAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data) { if (Data.EvaluatedData.Attribute == GetCurrentHPAttribute()) { const float NewCurrentHP = FMath::Clamp(GetCurrentHP(), 0.0f, GetMaxHP()); SetCurrentHP(NewCurrentHP); } if (Data.EvaluatedData.Attribute == GetMaxHPAttribute()) { const float NewMaxHP = FMath::Clamp(GetMaxHP(), 0.0f, 100.0f); SetMaxHP(NewMaxHP); } if (Data.EvaluatedData.Attribute == GetCurrentStunAttribute()) { const float NewMaxHP = FMath::Clamp(GetMaxHP(), 0.0f, 100.0f); SetMaxHP(NewMaxHP); } }우선 공통으로 사용할 UBFAttributeSet에 Stun치를 추가하고 초기화와 Clamp를 통해 값을 제어 해주도록 구현 하였다.
🎮 UDataAsset_StartUpBase.h
UCLASS() class BOSSFIGHT_API UDataAsset_StartUpBase : public UDataAsset { GENERATED_BODY() public: //중략 UPROPERTY(EditDefaultsOnly, Category = "StartUp Data") TArray < TSubclassOf<UGameplayEffect>> StartUpGameplayEffects; void GrantAbilities(const TArray<TSubclassOf<UBFGameplayAbility>>& InAbilityToGive, UBFAbilitySystemComponent* InASCToGive, int32 ApplyLevel = 1); };🎮 UDataAsset_StartUpBase.cpp
void UDataAsset_StartUpBase::GiveToAbilitySystemComponent(UBFAbilitySystemComponent* InASCToGive, int32 ApplyLevel) { check(InASCToGive); GrantAbilities(ActivateOnGivenAbilities, InASCToGive, ApplyLevel); GrantAbilities(ActivateOnTriggerdAbilities, InASCToGive, ApplyLevel); if (!StartUpGameplayEffects.IsEmpty()) { for (const TSubclassOf<UGameplayEffect>& EffectClass : StartUpGameplayEffects) { if (!EffectClass) continue; UGameplayEffect* EffectCDO = EffectClass->GetDefaultObject<UGameplayEffect>(); InASCToGive->ApplyGameplayEffectToSelf(EffectCDO, ApplyLevel, InASCToGive->MakeEffectContext()); } } }위와같이 UDataAsset_StartUpBase를 변경 해주었다. 다음으로, 필요한 GameplayEffect를 작성하고 각 캐릭터별 DataAsset에 추가 해주자.




