当前位置: 首页 > wzjs >正文

小语种网站建设要点如何制作网页链接

小语种网站建设要点,如何制作网页链接,如何查询关键词的搜索量,洛阳网站建设行业文章目录创建技能图标UI类从角色中将技能表传递到UI中创建一个技能列表获取蓝耗以及冷却让冷却实现倒数计时用扫描雷达做冷却倒数材质创建技能图标UI类 // 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #includ…

文章目录

  • 创建技能图标UI类
    • 从角色中将技能表传递到UI中
  • 创建一个技能列表
  • 获取蓝耗以及冷却
  • 让冷却实现倒数计时
  • 用扫描雷达做冷却倒数材质


创建技能图标UI类

在这里插入图片描述

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "AbilityGauge.generated.h"/*** */
UCLASS()
class CRUNCH_API UAbilityGauge : public UUserWidget
{GENERATED_BODY()private:// 技能图标UPROPERTY(meta = (BindWidget))TObjectPtr<UImage> Icon;// 冷却计时文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CooldownCounterText;// 冷却总时长文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CooldownDurationText;// 技能消耗文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CostText;
};

放入cpp写好的控件
在这里插入图片描述

从角色中将技能表传递到UI中

在能力组件CAbilitySystemComponentCCharacter角色基类中添加获取技能表的函数

	const TMap<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& GetAbilities() const;
const TMap<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& UCAbilitySystemComponent::GetAbilities() const
{return Abilities;
}
const TMap<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& ACCharacter::GetAbilities() const
{return CAbilitySystemComponent->GetAbilities();
}

GameplayWidget创建一个获取技能表传递配置的函数

void ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& Abilities);

在玩家控制器CPlayerController中把技能表传递给UI

void ACPlayerController::SpawnGameplayWidget()
{// 检查当前玩家控制器是否是本地玩家控制器if (!IsLocalPlayerController()) return;if (GameplayWidgetClass){GameplayWidget = CreateWidget<UGameplayWidget>(this, GameplayWidgetClass);if (GameplayWidget){// 添加到视口中GameplayWidget->AddToViewport();// 将技能数据传递给UIGameplayWidget->ConfigureAbilities(CPlayerCharacter->GetAbilities());}}
}

创建一个技能列表

在这里插入图片描述

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Components/ListView.h"
#include "GAS/Core/CGameplayAbilityTypes.h"
#include "AbilityListView.generated.h"/*** */
UCLASS()
class CRUNCH_API UAbilityListView : public UListView
{GENERATED_BODY()
public:// 配置能力表void ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities);};
#include "AbilityListView.h"#include "Abilities/GameplayAbility.h"void UAbilityListView::ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities)
{//OnEntryWidgetGenerated().AddUObject()for (const TPair<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& AbilityPair : Abilities){AddItem(AbilityPair.Value.GetDefaultObject());}
}

GameplayWidget中添加技能列表

	// 技能列表UPROPERTY(meta=(BindWidget))TObjectPtr<UAbilityListView> AbilityListView;
void UGameplayWidget::ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& Abilities)
{AbilityListView->ConfigureAbilities(Abilities);
}

然后还不能用说缺东西
在这里插入图片描述
让技能图标继承IUserObjectListEntry接口

UCLASS()
class CRUNCH_API UAbilityGauge : public UUserWidget, public IUserObjectListEntry
{GENERATED_BODY()
public:virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override;
};
void UAbilityGauge::NativeOnListItemObjectSet(UObject* ListItemObject)
{IUserObjectListEntry::NativeOnListItemObjectSet(ListItemObject);
}

就可以在UI中设置该技能图标类了,下面的数字可以控制显示的数目
在这里插入图片描述
调整为水平方向,间距也可以调整
在这里插入图片描述
创建数据表

// 技能控件数据结构,用于配置技能UI显示内容
USTRUCT(BlueprintType)
struct FAbilityWidgetData : public FTableRowBase
{GENERATED_BODY()// 技能类UPROPERTY(EditAnywhere, BlueprintReadWrite)TSubclassOf<class UGameplayAbility> AbilityClass;// 技能名称UPROPERTY(EditAnywhere, BlueprintReadWrite)FName AbilityName;// 技能图标UPROPERTY(EditAnywhere, BlueprintReadWrite)TSoftObjectPtr<UTexture2D> Icon;// 技能描述UPROPERTY(EditAnywhere, BlueprintReadWrite)FText Description;
};

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补全技能列表AbilityListView

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Components/ListView.h"
#include "GAS/Core/CGameplayAbilityTypes.h"
#include "UI/Gameplay/Abilities/AbilityGauge.h"
#include "AbilityListView.generated.h"/*** */
UCLASS()
class CRUNCH_API UAbilityListView : public UListView
{GENERATED_BODY()
public:// 配置能力表void ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities);
private:UPROPERTY(EditAnywhere, Category = "Data")TObjectPtr<UDataTable> AbilityDataTable;// 技能生成绑定void AbilityGaugeGenerated(UUserWidget& Widget);// 查找指定技能的UI数据const FAbilityWidgetData* FindWidgetDataForAbility(const TSubclassOf<UGameplayAbility>& AbilityClass) const;
};
// 幻雨喜欢小猫咪#include "AbilityListView.h"#include "Abilities/GameplayAbility.h"void UAbilityListView::ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities)
{OnEntryWidgetGenerated().AddUObject(this, &UAbilityListView::AbilityGaugeGenerated);// 添加技能for (const TPair<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& AbilityPair : Abilities){AddItem(AbilityPair.Value.GetDefaultObject());}
}void UAbilityListView::AbilityGaugeGenerated(UUserWidget& Widget)
{UAbilityGauge* AbilityGauge = Cast<UAbilityGauge>(&Widget);if (AbilityGauge){AbilityGauge->ConfigureWithWidgetData(FindWidgetDataForAbility(AbilityGauge->GetListItem<UGameplayAbility>()->GetClass()));}
}const FAbilityWidgetData* UAbilityListView::FindWidgetDataForAbility(const TSubclassOf<UGameplayAbility>& AbilityClass) const
{if (!AbilityDataTable) return nullptr;for (auto& AbilityWidgetDataPair : AbilityDataTable->GetRowMap()){const FAbilityWidgetData* WidgetData = AbilityDataTable->FindRow<FAbilityWidgetData>(AbilityWidgetDataPair.Key, "");if (WidgetData && WidgetData->AbilityClass == AbilityClass){return WidgetData;}}return nullptr;
}

在技能图标中添加配置函数以及要设置的材质对应的图标名称

	// 用数据配置控件显示void ConfigureWithWidgetData(const FAbilityWidgetData* WidgetData);
private:// 图标材质参数名UPROPERTY(EditDefaultsOnly, Category = "Visual")FName IconMaterialParamName = "Icon";
void UAbilityGauge::ConfigureWithWidgetData(const FAbilityWidgetData* WidgetData)
{if (Icon && WidgetData){// 设置图片Icon->GetDynamicMaterial()->SetTextureParameterValue(IconMaterialParamName, WidgetData->Icon.LoadSynchronous());}
}

把数据表添加进去
在这里插入图片描述

获取蓝耗以及冷却

CAbilitySystemStatics函数类中添加获取技能冷却和技能消耗的函数

UCLASS()
class UCAbilitySystemStatics : public UBlueprintFunctionLibrary
{GENERATED_BODY()
public:static FGameplayTag GetBasicAttackAbilityTag();// 获取技能冷却static float GetStaticCooldownDurationForAbility(const UGameplayAbility* Ability);// 获取技能消耗static float GetStaticCostForAbility(const UGameplayAbility* Ability);
};
float UCAbilitySystemStatics::GetStaticCooldownDurationForAbility(const UGameplayAbility* Ability)
{if (!Ability) return 0.f;// 获取冷却效果const UGameplayEffect* CoolDownEffect = Ability->GetCooldownGameplayEffect();if (!CoolDownEffect) return 0.f;float CooldownDuration = 0.f;// 调用GetStaticMagnitudeIfPossible方法从冷却效果中获取静态持续时间值CoolDownEffect->DurationMagnitude.GetStaticMagnitudeIfPossible(1, CooldownDuration);return CooldownDuration;
}float UCAbilitySystemStatics::GetStaticCostForAbility(const UGameplayAbility* Ability)
{if (!Ability) return 0.f;// 获取消耗效果const UGameplayEffect* CostEffect = Ability->GetCostGameplayEffect();if (!CostEffect || CostEffect->Modifiers.Num() == 0) return 0.f;float Cost = 0.f;CostEffect->Modifiers[0].ModifierMagnitude.GetStaticMagnitudeIfPossible(1, Cost);// 取正值return FMath::Abs(Cost);
}

到技能图标AbilityGauge中设置一下cd和消耗

public:// 控件构建时调用virtual void NativeConstruct() override;
private:// 技能类默认对象UPROPERTY()TObjectPtr<UGameplayAbility> AbilityCDO;
void UAbilityGauge::NativeConstruct()
{Super::NativeConstruct();// 隐藏冷却计时器CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);
}void UAbilityGauge::NativeOnListItemObjectSet(UObject* ListItemObject)
{IUserObjectListEntry::NativeOnListItemObjectSet(ListItemObject);AbilityCDO = Cast<UGameplayAbility>(ListItemObject);// 获取冷却和消耗float CoolDownDuration = UCAbilitySystemStatics::GetStaticCooldownDurationForAbility(AbilityCDO);float Cost = UCAbilitySystemStatics::GetStaticCostForAbility(AbilityCDO);// 设置冷却和消耗CooldownDurationText->SetText(FText::AsNumber(CoolDownDuration));CostText->SetText(FText::AsNumber(Cost));
}

运行一下就能显示蓝耗以及cd了(为啥灰的,因为我偷懒了)
在这里插入图片描述

让冷却实现倒数计时

private:// 冷却倒数计时的间隔UPROPERTY(EditDefaultsOnly, Category = "Cooldown")float CooldownUpdateInterval = 0.1f;// 技能释放时回调void AbilityCommitted(UGameplayAbility* Ability);// 启动冷却计时void StartCooldown(float CooldownTimeRemaining, float CooldownDuration);// 缓存的冷却总时长float CachedCooldownDuration;// 缓存的冷却剩余时间float CachedCooldownTimeRemaining;// 冷却完成定时器FTimerHandle CooldownTimerHandle;// 冷却刷新定时器FTimerHandle CooldownTimerUpdateHandle;// 数字格式化选项(整数)FNumberFormattingOptions WholeNumberFormattingOptions;// 数字格式化选项(一位小数)FNumberFormattingOptions TwoDigitNumberFormattingOptions;// 冷却完成回调void CooldownFinished();// 冷却刷新回调void UpdateCooldown();
void UAbilityGauge::NativeConstruct()
{Super::NativeConstruct();// 隐藏冷却计时器CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);UAbilitySystemComponent* OwnerASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(GetOwningPlayerPawn());if (OwnerASC){// 监听技能释放OwnerASC->AbilityCommittedCallbacks.AddUObject(this, &UAbilityGauge::AbilityCommitted);}WholeNumberFormattingOptions.MaximumFractionalDigits = 0;TwoDigitNumberFormattingOptions.MaximumFractionalDigits = 2;
}void UAbilityGauge::AbilityCommitted(UGameplayAbility* Ability)
{// 判断释放的技能是否为该图标的技能if (Ability->GetClass()->GetDefaultObject() == AbilityCDO){// 获取技能冷却剩余时长float CooldownTimeRemaining = 0.f;// 获取技能冷却总时长float CooldownDuration = 0.f;// 返回当前激活的冷却剩余时间(秒)及该冷却的原始持续时间Ability->GetCooldownTimeRemainingAndDuration(Ability->GetCurrentAbilitySpecHandle(), Ability->GetCurrentActorInfo(), CooldownTimeRemaining, CooldownDuration);// 启动UI技能冷却StartCooldown(CooldownTimeRemaining, CooldownDuration);}
}void UAbilityGauge::StartCooldown(float CooldownTimeRemaining, float CooldownDuration)
{// 设置冷却时间CooldownDurationText->SetText(FText::AsNumber(CooldownDuration));// 将倒数计时设置为可视CooldownDurationText->SetVisibility(ESlateVisibility::Visible);// 缓存冷却总时长CachedCooldownDuration = CooldownDuration;// 缓存冷却剩余时间CachedCooldownTimeRemaining = CooldownTimeRemaining;// 冷却结束监听GetWorld()->GetTimerManager().SetTimer(CooldownTimerHandle, this, &UAbilityGauge::CooldownFinished,CachedCooldownTimeRemaining);// 启动倒数计时GetWorld()->GetTimerManager().SetTimer(CooldownTimerUpdateHandle, this, &UAbilityGauge::UpdateCooldown, CooldownUpdateInterval, true, 0.f);
}void UAbilityGauge::CooldownFinished()
{CachedCooldownDuration = CachedCooldownTimeRemaining = 0.f;// 冷却结束隐藏倒计时文本CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);// 关闭倒数计时定时器GetWorld()->GetTimerManager().ClearTimer(CooldownTimerUpdateHandle);
}void UAbilityGauge::UpdateCooldown()
{// 更新剩余时间CachedCooldownTimeRemaining -= CooldownUpdateInterval;// 剩余时间大于1就显示一位数FNumberFormattingOptions* FormattingOptions = CachedCooldownTimeRemaining > 1 ? &WholeNumberFormattingOptions : &TwoDigitNumberFormattingOptions;CooldownCounterText->SetText(FText::AsNumber(CachedCooldownTimeRemaining, FormattingOptions));
}

获取到倒数计时的显示
在这里插入图片描述

用扫描雷达做冷却倒数材质

在这里插入图片描述
技能图标中添加

	// 冷却百分比材质参数名UPROPERTY(EditDefaultsOnly, Category = "Visual")FName CooldownPercentParamName = "Percent";
void UAbilityGauge::CooldownFinished()
{CachedCooldownDuration = CachedCooldownTimeRemaining = 0.f;// 冷却结束隐藏倒计时文本CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);// 关闭倒数计时定时器GetWorld()->GetTimerManager().ClearTimer(CooldownTimerUpdateHandle);Icon->GetDynamicMaterial()->SetScalarParameterValue(CooldownPercentParamName, 1.f);
}void UAbilityGauge::UpdateCooldown()
{// 更新剩余时间CachedCooldownTimeRemaining -= CooldownUpdateInterval;// 剩余时间大于1就显示一位数FNumberFormattingOptions* FormattingOptions = CachedCooldownTimeRemaining > 1 ? &WholeNumberFormattingOptions : &TwoDigitNumberFormattingOptions;Icon->GetDynamicMaterial()->SetScalarParameterValue(CooldownPercentParamName, 1.0f - CachedCooldownTimeRemaining / CachedCooldownDuration);CooldownCounterText->SetText(FText::AsNumber(CachedCooldownTimeRemaining, FormattingOptions));
}

在这里插入图片描述
技能图标代码

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Blueprint/IUserObjectListEntry.h"
#include "Blueprint/UserWidget.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "AbilityGauge.generated.h"// 技能控件数据结构,用于配置技能UI显示内容
USTRUCT(BlueprintType)
struct FAbilityWidgetData : public FTableRowBase
{GENERATED_BODY()// 技能类UPROPERTY(EditAnywhere, BlueprintReadWrite)TSubclassOf<class UGameplayAbility> AbilityClass;// 技能名称UPROPERTY(EditAnywhere, BlueprintReadWrite)FName AbilityName;// 技能图标UPROPERTY(EditAnywhere, BlueprintReadWrite)TSoftObjectPtr<UTexture2D> Icon;// 技能描述UPROPERTY(EditAnywhere, BlueprintReadWrite)FText Description;
};/*** 技能槽UI控件,负责显示技能图标、冷却、等级、消耗等信息* 支持技能升级、冷却计时、能否释放等状态的动态刷新*/
UCLASS()
class CRUNCH_API UAbilityGauge : public UUserWidget, public IUserObjectListEntry
{GENERATED_BODY()
public:// 控件构建时调用virtual void NativeConstruct() override;// 列表项对象设置时调用virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override;// 用数据配置控件显示void ConfigureWithWidgetData(const FAbilityWidgetData* WidgetData);
private:// 冷却倒数计时的间隔UPROPERTY(EditDefaultsOnly, Category = "Cooldown")float CooldownUpdateInterval = 0.1f;// 图标材质参数名UPROPERTY(EditDefaultsOnly, Category = "Visual")FName IconMaterialParamName = "Icon";// 冷却百分比材质参数名UPROPERTY(EditDefaultsOnly, Category = "Visual")FName CooldownPercentParamName = "Percent";// 技能图标UPROPERTY(meta = (BindWidget))TObjectPtr<UImage> Icon;// 冷却计时文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CooldownCounterText;// 冷却总时长文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CooldownDurationText;// 技能消耗文本控件UPROPERTY(meta=(BindWidget))TObjectPtr<UTextBlock> CostText;// 技能类默认对象UPROPERTY()TObjectPtr<UGameplayAbility> AbilityCDO;// 技能释放时回调void AbilityCommitted(UGameplayAbility* Ability);// 启动冷却计时void StartCooldown(float CooldownTimeRemaining, float CooldownDuration);// 缓存的冷却总时长float CachedCooldownDuration;// 缓存的冷却剩余时间float CachedCooldownTimeRemaining;// 冷却完成定时器FTimerHandle CooldownTimerHandle;// 冷却刷新定时器FTimerHandle CooldownTimerUpdateHandle;// 数字格式化选项(整数)FNumberFormattingOptions WholeNumberFormattingOptions;// 数字格式化选项(一位小数)FNumberFormattingOptions TwoDigitNumberFormattingOptions;// 冷却完成回调,隐藏冷却文本并重置进度条void CooldownFinished();// 冷却刷新回调,更新冷却文本和进度条void UpdateCooldown();
};
// 幻雨喜欢小猫咪#include "UI/Gameplay/Abilities/AbilityGauge.h"#include "AbilitySystemBlueprintLibrary.h"
#include "AbilitySystemComponent.h"
#include "Components/Image.h"
#include "GAS/Core/CAbilitySystemStatics.h"
#include "Abilities/GameplayAbility.h"void UAbilityGauge::NativeConstruct()
{Super::NativeConstruct();// 隐藏冷却计时器CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);UAbilitySystemComponent* OwnerASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(GetOwningPlayerPawn());if (OwnerASC){// 监听技能释放OwnerASC->AbilityCommittedCallbacks.AddUObject(this, &UAbilityGauge::AbilityCommitted);}WholeNumberFormattingOptions.MaximumFractionalDigits = 0;TwoDigitNumberFormattingOptions.MaximumFractionalDigits = 2;
}void UAbilityGauge::NativeOnListItemObjectSet(UObject* ListItemObject)
{IUserObjectListEntry::NativeOnListItemObjectSet(ListItemObject);AbilityCDO = Cast<UGameplayAbility>(ListItemObject);// 获取冷却和消耗float CoolDownDuration = UCAbilitySystemStatics::GetStaticCooldownDurationForAbility(AbilityCDO);float Cost = UCAbilitySystemStatics::GetStaticCostForAbility(AbilityCDO);// 设置冷却和消耗CooldownDurationText->SetText(FText::AsNumber(CoolDownDuration));CostText->SetText(FText::AsNumber(Cost));
}void UAbilityGauge::ConfigureWithWidgetData(const FAbilityWidgetData* WidgetData)
{if (Icon && WidgetData){// 设置图片Icon->GetDynamicMaterial()->SetTextureParameterValue(IconMaterialParamName, WidgetData->Icon.LoadSynchronous());}
}void UAbilityGauge::AbilityCommitted(UGameplayAbility* Ability)
{// 判断释放的技能是否为该图标的技能if (Ability->GetClass()->GetDefaultObject() == AbilityCDO){// 获取技能冷却剩余时长float CooldownTimeRemaining = 0.f;// 获取技能冷却总时长float CooldownDuration = 0.f;// 返回当前激活的冷却剩余时间(秒)及该冷却的原始持续时间Ability->GetCooldownTimeRemainingAndDuration(Ability->GetCurrentAbilitySpecHandle(), Ability->GetCurrentActorInfo(), CooldownTimeRemaining, CooldownDuration);// 启动UI技能冷却StartCooldown(CooldownTimeRemaining, CooldownDuration);}
}void UAbilityGauge::StartCooldown(float CooldownTimeRemaining, float CooldownDuration)
{// 设置冷却时间// CooldownDurationText->SetText(FText::AsNumber(CooldownDuration));CooldownCounterText->SetText(FText::AsNumber(CooldownDuration));// 缓存冷却总时长CachedCooldownDuration = CooldownDuration;// 缓存冷却剩余时间CachedCooldownTimeRemaining = CooldownTimeRemaining;// 将倒数计时设置为可视CooldownCounterText->SetVisibility(ESlateVisibility::Visible);// 冷却结束监听GetWorld()->GetTimerManager().SetTimer(CooldownTimerHandle, this, &UAbilityGauge::CooldownFinished,CachedCooldownTimeRemaining);// 启动倒数计时GetWorld()->GetTimerManager().SetTimer(CooldownTimerUpdateHandle, this, &UAbilityGauge::UpdateCooldown, CooldownUpdateInterval, true, 0.f);
}void UAbilityGauge::CooldownFinished()
{CachedCooldownDuration = CachedCooldownTimeRemaining = 0.f;// 冷却结束隐藏倒计时文本CooldownCounterText->SetVisibility(ESlateVisibility::Hidden);// 关闭倒数计时定时器GetWorld()->GetTimerManager().ClearTimer(CooldownTimerUpdateHandle);Icon->GetDynamicMaterial()->SetScalarParameterValue(CooldownPercentParamName, 1.f);
}void UAbilityGauge::UpdateCooldown()
{// 更新剩余时间CachedCooldownTimeRemaining -= CooldownUpdateInterval;// 剩余时间大于1就显示一位数FNumberFormattingOptions* FormattingOptions = CachedCooldownTimeRemaining > 1 ? &WholeNumberFormattingOptions : &TwoDigitNumberFormattingOptions;Icon->GetDynamicMaterial()->SetScalarParameterValue(CooldownPercentParamName, 1.0f - CachedCooldownTimeRemaining / CachedCooldownDuration);CooldownCounterText->SetText(FText::AsNumber(CachedCooldownTimeRemaining, FormattingOptions));
}

技能列表代码

// 幻雨喜欢小猫咪#pragma once#include "CoreMinimal.h"
#include "Components/ListView.h"
#include "GAS/Core/CGameplayAbilityTypes.h"
#include "UI/Gameplay/Abilities/AbilityGauge.h"
#include "AbilityListView.generated.h"/*** */
UCLASS()
class CRUNCH_API UAbilityListView : public UListView
{GENERATED_BODY()
public:// 配置能力表void ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities);
private:UPROPERTY(EditAnywhere, Category = "Data")TObjectPtr<UDataTable> AbilityDataTable;// 技能生成绑定void AbilityGaugeGenerated(UUserWidget& Widget);// 查找指定技能的UI数据const FAbilityWidgetData* FindWidgetDataForAbility(const TSubclassOf<UGameplayAbility>& AbilityClass) const;
};
// 幻雨喜欢小猫咪#include "AbilityListView.h"#include "Abilities/GameplayAbility.h"void UAbilityListView::ConfigureAbilities(const TMap<ECAbilityInputID, TSubclassOf<class UGameplayAbility>>& Abilities)
{// 绑定技能生成事件OnEntryWidgetGenerated().AddUObject(this, &UAbilityListView::AbilityGaugeGenerated);// 添加技能for (const TPair<ECAbilityInputID, TSubclassOf<UGameplayAbility>>& AbilityPair : Abilities){AddItem(AbilityPair.Value.GetDefaultObject());}
}void UAbilityListView::AbilityGaugeGenerated(UUserWidget& Widget)
{// 将控件转换为UAbilityGauge类型UAbilityGauge* AbilityGauge = Cast<UAbilityGauge>(&Widget);if (AbilityGauge){// 查找并配置技能计量器的数据AbilityGauge->ConfigureWithWidgetData(FindWidgetDataForAbility(AbilityGauge->GetListItem<UGameplayAbility>()->GetClass()));}
}const FAbilityWidgetData* UAbilityListView::FindWidgetDataForAbility(const TSubclassOf<UGameplayAbility>& AbilityClass) const
{// 如果数据表为空则直接返回nullptrif (!AbilityDataTable) return nullptr;// 遍历数据表的所有行for (auto& AbilityWidgetDataPair : AbilityDataTable->GetRowMap()){// 查找当前行的数据const FAbilityWidgetData* WidgetData = AbilityDataTable->FindRow<FAbilityWidgetData>(AbilityWidgetDataPair.Key, "");// 如果找到数据且技能类匹配则返回if (WidgetData && WidgetData->AbilityClass == AbilityClass){return WidgetData;}}// 未找到匹配的数据return nullptr;
}
http://www.dtcms.com/wzjs/17018.html

相关文章:

  • 十大网站建设手机百度安装下载
  • 林州网站建设报价站长推荐
  • 自学it做网站百度搜索风云榜排名
  • 湖北企业商城网站建设b站推广网站2024
  • 南昌正规网站公司电子商务网站建设与管理
  • 手机门户网站开发怎么搭建网站
  • 做网站看什么书在线域名解析ip地址
  • 公司专业网页制作福建网络seo关键词优化教程
  • 网站建设项目进度表制作网页的网站
  • 河北网站建设哪家好厦门人才网招聘
  • 小猪会飞网站建设免费个人推广引流平台
  • 北京楼市暴跌黄山搜索引擎优化
  • 越秀区网站建设公司谷歌网页版入口在线
  • 项目建设总结报告搜索引擎优化技巧
  • 免费建站网站自助建站的网站建站全国免费发布广告信息
  • 织梦网站404怎么做安卓优化大师手机版
  • 团购网站建设案例网络公司关键词排名
  • 重庆梁平网站建设哪家便宜汕头企业网络推广
  • 无锡做网站优化亚马逊关键词搜索器
  • 上海宝山网站建设培训班百度网盘官方网站
  • 免费作图网站都有哪些网站seo优化徐州百度网络
  • wordpress 安装 ubuntu天津关键词优化专家
  • 网页传奇怎么删除关键词优化软件有哪些
  • 网站建设汇报评估互联网推广是什么
  • 做电影网站的成本杭州小周seo
  • 哪里有建网站的厦门关键词排名提升
  • 网站建设实训心得软文推广网
  • 郑州网站建设up188推广普通话手抄报图片
  • 东莞外贸网站建设aso优化师主要是干嘛的
  • 建设服装网站的亮点网站代理公司