1 任务与实现思路
任务:
1.完善普攻的倍率,每段加入实际判定
2.加入第五段倍率属性,具体按比例将第五段分成几段,契合动画
3.加入伤害显示UI
4.用DoesSaveGameExist判断是否存在文件,不存在就新建,存在就读取
这里记录一下添加新的属性要做的操作:
1.AS里添加定义
2. 结构体里添加定义
3.完善函数
2 实现过程
2.1 给FSavedAttributes添加构造函数
FSavedAttributes()
{
MaxHealth=0;
CurrentHealth=0;
MaxStamina=0;
CurrentStamina=0;
BaseAttack=0;
BaseStagger=0;
BaseResistance=0;
CRT=0;
CriticalDamage=0;
NA_1_Multi=0;
NA_2_Multi=0;
NA_3_Multi=0;
NA_4_Multi=0;
NA_5_Multi=0;
}
FSavedAttributes(float MaxHealth, float CurrentHealth, float MaxStamina, float CurrentStamina,float BaseAttack,
float BaseStagger,float BaseResistance,float CRT,float CriticalDamage,float NA_1_Multi,float NA_2_Multi,float NA_3_Multi,
float NA_4_Multi,float NA_5_Multi)
{
this->MaxHealth=MaxHealth;
this->CurrentHealth=CurrentHealth;
this->MaxStamina=MaxStamina;
this->CurrentStamina=CurrentStamina;
this->BaseAttack=BaseAttack;
this->BaseStagger=BaseStagger;
this->BaseResistance=BaseResistance;
this->CRT=CRT;
this->CriticalDamage=CriticalDamage;
this->NA_1_Multi=NA_1_Multi;
this->NA_2_Multi=NA_2_Multi;
this->NA_3_Multi=NA_3_Multi;
this->NA_4_Multi=NA_4_Multi;
this->NA_5_Multi=NA_5_Multi;
}
2.2 AS中添加新属性
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Player_AS")
FGameplayAttributeData NA_5_Multi;
ATTRIBUTE_ACCESSORS(UMyPlayerAttributeSet, NA_5_Multi);
2.3 完善AS初始化函数和转化结构体的函数
就是在这俩函数里补一下刚加的属性
void UMyPlayerAttributeSet::InitPlayerAttributeSet(FSavedAttributes savedAttribute)
FSavedAttributes UMyPlayerAttributeSet::ASToFSavedAttribute()
2.4 完善AS构造函数的读写逻辑
UMyPlayerAttributeSet::UMyPlayerAttributeSet()
{
// 从槽位加载游戏
bool bIsSaveGameExist=UGameplayStatics::DoesSaveGameExist(FString("PlayerAttributes"), 0);
if(bIsSaveGameExist)
{
UMyPlayerData* LoadedPlayerData= Cast<UMyPlayerData>(UGameplayStatics::LoadGameFromSlot(FString("PlayerAttributes"), 0));
InitPlayerAttributeSet(LoadedPlayerData->GetSavedAttributes());
}
else
{
UMyPlayerData* LoadedPlayerData=NewObject<UMyPlayerData>();
//构造新的
FSavedAttributes ASToSave=FSavedAttributes(100,
100,
100,
100,
10,
10,
10,
0.5,
0.5,
1.1,
1.2,
1.3,
1.4,
3.2);
//用这个新的FSavedAttributes初始化AS
InitPlayerAttributeSet(ASToSave);
//保存到槽位里
LoadedPlayerData->SetSavedAttributes(ASToSave);
UE_LOG(LogTemp,Warning,TEXT("On Construct New AttributeSet"));
UGameplayStatics::SaveGameToSlot(LoadedPlayerData,FString("PlayerAttributes"),0);
}
UE_LOG(LogTemp, Warning, TEXT("MyPlayerAttributeSet-->OnConstruct"));
}
2.5 同理完善强化系统的读写
UStrengthenManager::UStrengthenManager()
{
bool bIsExist=UGameplayStatics::DoesSaveGameExist(FString("StrengthenInfo"), 0);
if(bIsExist)
{
Load();
}
else
{
UE_LOG(LogTemp, Warning, TEXT("New StrengthenInfo"));
FStrengthenCellInfo SCI_1=FStrengthenCellInfo();
SCI_1.bIsActive = false;
SCI_1.DescriptionText=FString("BaseAttack+10");
TArray<FMyItemInfo>NeededItems;
NeededItems.Add(FMyItemInfo(1,10,FString("源能结晶")));
SCI_1.NeededItems=NeededItems;
SCI_1.PreIndex=TArray<int32>();
StrengthenTree_1.Add(SCI_1);
SCI_1.bIsActive = false;
SCI_1.DescriptionText=FString("MaxHealth+100");
NeededItems.Empty();
NeededItems.Add(FMyItemInfo(1,15,FString("源能结晶")));
SCI_1.NeededItems=NeededItems;
SCI_1.PreIndex={0};
StrengthenTree_1.Add(SCI_1);
SCI_1.bIsActive = false;
SCI_1.DescriptionText=FString("BaseResistance+10");
NeededItems.Empty();
NeededItems.Add(FMyItemInfo(1,15,FString("源能结晶")));
SCI_1.NeededItems=NeededItems;
SCI_1.PreIndex={0};
StrengthenTree_1.Add(SCI_1);
Save();
}
}
2.6 完善第五段普攻的四段伤害
测试打印了一下倍率,没啥问题
2.7 EnemyUI里添加伤害显示的动画
是否暴击来播放不同的动画:
因为今天晚上才回来,这篇是补的昨天的,先到这
TODO:
1.将第五段普攻按比例分给四段判定
2.将伤害判定逻辑完善