建筑效果图素材网站做网站头视频
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:42
当前位置: 首页 > news >正文
建筑效果图素材网站,做网站头视频,wordpress下载页源码,外包公司是什么这一篇文章是个人的实战经验记录#xff0c;如果对基础性的内容不了解的#xff0c;可以看我前面一篇文章对基础的概念以及内容的讲解。
设置AttributeSet
使用GAS之前#xff0c;首先需要设置参数集AS#xff0c;这个是用于同步的一些参数#xff0c;至于如何设置GAS如果对基础性的内容不了解的可以看我前面一篇文章对基础的概念以及内容的讲解。
设置AttributeSet
使用GAS之前首先需要设置参数集AS这个是用于同步的一些参数至于如何设置GAS我之前的文章里面有讲这里不赘述。 每个Attribute其实包含两个值 Base Value和Current Value。Base Value是在GE里面Instant设置属性时被修改的值而Current Value是在GE的Infinite永久修改和Has Duration具有时效性修改时修改的目的就是为了时效失效以后能够将值的结果修改回去。当然获取值时都是获取的Current Value如果没有时效性的影响Base Value和Current Value值也是相等的。 AS里面主要还是为了创建一些值并且由ASC调用GE去修改里面的值但是这个类只能在C里面去定义。 上面是我在AS里面定义的两个生命相关的值以及覆盖的两个函数回调。 PreAttributeChange 主要是为了触发一个值的最大值被修改后它的值也会按比例进行修改 AdjustAttributeForMaxChange 就是为了实现这个效果的函数这个也是从ActionRPG的项目里面抄过来的。 PostGameplayEffectExecute 就是Base Value改变后触发的我们可以在这个函数里面比如限制血量不会超过最大血量的值也不会小于0的情况。
初始化Attribute
创建好了AS接着要在角色身上使用并且初始化AS里面一些值这里有三种方法 第一种方法也不算方法其实就是在AS类里面给它设置默认值 这是设置以后也算是初始化了相关属性的一些值。 我们还需要在OwnerActor里面进行初始化需要在实例化ASC后面创建即可。这样我们就可以在ASC中去获取AS的值了。 第二种方法当然就是官方推荐的使用GE去初始化 创建一个GE然后Duration Policy设置为Instant直接修改Base Value然后设置好需要修改的AttributeModifier Op设置为Override覆盖然后在下面的设置固定数值就可以实现重新设置只需要设置每个就可以实现覆盖。 这里有个小细节就是初始化时推荐先修改最大值然后再修改默认值因为在C里面我们有个按比例进行修改默认值的如果你先修改Health然后再修改MaxHealth它会按比例放大的然后再直接获取值会出现问题所以我先设置的最大值然后再设置就没这样的问题了。 设置完成以后使用ApplyGameplayEffectToSelf节点去设置即可。 使用DataTable设置默认值 这个需要开启在蓝图内读写ASC 然后ASC细节里面会有一项AttributeTest里面可以创建多个数组代表可以初始化多个AS。Attributes选择AS的类DefaultStartingTable则是选择创建的DataTable。 创建DataTable的时候需要选择AttributeMetaData 行命名要和在GE里面设置的命名保持一致设置值时就BaseValue有用其它值估计是为了以后版本更新时使用现在还没啥用。
获取AttributeSet的数据 可以从ASC去获取属性的Base Value 可以从ASC中获取Current Value
我们还可以通过扩展c接口来实现获取 比如在它的OwnerActor类里面增加获取属性的方法其实就是返回AttributeSet的相关属性
还有一种就是使用AbilityTask实现监听接口需要创建C类来实现这里我也是直接从官方文档案例里面扒的把代码列出来。
AT_AttributeChanged.h
// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h
#include Kismet/BlueprintAsyncActionBase.h
#include AbilitySystemComponent.h
#include AT_AttributeChanged.generated.hDECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnAttributeChanged, FGameplayAttribute, Attribute, float, NewValue, float, OldValue);/*** Blueprint node to automatically register a listener for all attribute changes in an AbilitySystemComponent.* Useful to use in UI./
UCLASS(BlueprintType, meta (ExposedAsyncProxy AsyncTask))
class SURVIVALALONE_API UAT_AttributeChanged : public UBlueprintAsyncActionBase
{GENERATED_BODY()public:UPROPERTY(BlueprintAssignable)FOnAttributeChanged OnAttributeChanged;// Listens for an attribute changing.UFUNCTION(BlueprintCallable, meta (BlueprintInternalUseOnly true))static UAT_AttributeChanged ListenForAttributeChange(UAbilitySystemComponent* AbilitySystemComponent, FGameplayAttribute Attribute);// Listens for an attribute changing.// Version that takes in an array of Attributes. Check the Attribute output for which Attribute changed.UFUNCTION(BlueprintCallable, meta (BlueprintInternalUseOnly true))static UAT_AttributeChanged* ListenForAttributesChange(UAbilitySystemComponent* AbilitySystemComponent, TArrayFGameplayAttribute Attributes);// You must call this function manually when you want the AsyncTask to end.// For UMG Widgets, you would call it in the Widgets Destruct event.UFUNCTION(BlueprintCallable)void EndTask();protected:UPROPERTY()UAbilitySystemComponent* ASC;FGameplayAttribute AttributeToListenFor;TArrayFGameplayAttribute AttributesToListenFor;void AttributeChanged(const FOnAttributeChangeData Data);
};
AT_AttributeChanged.cpp
// Fill out your copyright notice in the Description page of Project Settings.#include AT_AttributeChanged.hUAT_AttributeChanged *UAT_AttributeChanged::ListenForAttributeChange(UAbilitySystemComponent *AbilitySystemComponent, FGameplayAttribute Attribute)
{UAT_AttributeChanged *WaitForAttributeChangedTask NewObjectUAT_AttributeChanged();WaitForAttributeChangedTask-ASC AbilitySystemComponent;WaitForAttributeChangedTask-AttributeToListenFor Attribute;if (!IsValid(AbilitySystemComponent) || !Attribute.IsValid()){WaitForAttributeChangedTask-RemoveFromRoot();return nullptr;}AbilitySystemComponent-GetGameplayAttributeValueChangeDelegate(Attribute).AddUObject(WaitForAttributeChangedTask, UAT_AttributeChanged::AttributeChanged);return WaitForAttributeChangedTask;
}UAT_AttributeChanged *UAT_AttributeChanged::ListenForAttributesChange(UAbilitySystemComponent *AbilitySystemComponent, TArrayFGameplayAttribute Attributes)
{UAT_AttributeChanged *WaitForAttributeChangedTask NewObjectUAT_AttributeChanged();WaitForAttributeChangedTask-ASC AbilitySystemComponent;WaitForAttributeChangedTask-AttributesToListenFor Attributes;if (!IsValid(AbilitySystemComponent) || Attributes.Num() 1){WaitForAttributeChangedTask-RemoveFromRoot();return nullptr;}for (FGameplayAttribute Attribute : Attributes){AbilitySystemComponent-GetGameplayAttributeValueChangeDelegate(Attribute).AddUObject(WaitForAttributeChangedTask, UAT_AttributeChanged::AttributeChanged);}return WaitForAttributeChangedTask;
}void UAT_AttributeChanged::EndTask()
{if (IsValid(ASC)){ASC-GetGameplayAttributeValueChangeDelegate(AttributeToListenFor).RemoveAll(this);for (FGameplayAttribute Attribute : AttributesToListenFor){ASC-GetGameplayAttributeValueChangeDelegate(Attribute).RemoveAll(this);}}SetReadyToDestroy();MarkAsGarbage();
}void UAT_AttributeChanged::AttributeChanged(const FOnAttributeChangeData Data)
{OnAttributeChanged.Broadcast(Data.Attribute, Data.NewValue, Data.OldValue);
}类实现了以后我们可以使用里面的两个方法 Listen for Attribute Change 可以监听一个属性的变动返回了当前监听实例以及变动后的回调还有之前的值变化后的值如果值发生改变就会触发OnAttributeChanged执行只需要后面执行每次数值改变都会触发执行。 Listen for Attribute Change可以传入一个数组获取多个属性的变动然后可以通过Attribute返回值判断是哪个属性 取消监听那么记得调用End Task一般在UI里面使用可以在创建UI的时候绑定然后把绑定的Task设置为变量销毁的时候End Task即可。
设置AttributeSet的值
在GAS系统中修改AttributeSet的值需要使用GE去实现 前面在初始化的时候也讲了相应的配置。如果上面的值是Instant那么这个GE被调用的时候血量的值会瞬间掉1点。
接下来介绍几个会在项目中使用到的场景。
持续掉血每秒掉多少血量 使用Has Duration下面设置持续时间在Period设置每过多少秒触发一次Execute Periodic Effect on Application 意思为添加时是否触发一次。 最简单的就是调用一下就行了一般这个需要在GA里面去触发的这一篇不包括GA相关。
根据等级设置血量加成
先创建一个CSV可以先创建Excel文件转csv 设置好文件以后 创建一个曲线表格 选择上面导入键可以将csv文件导入Row是作为值的名称使用时需要选择哪个Row而数字则代表当前的技能等级。 这里因为是加成所以运算修改为相乘而ScalableFloatMagnitude的数值是从曲线表格里面获取到的值和此值相乘为最终的值。这个值再与现在的MaxHealth相乘得到了变化后的值。 后面设置了曲线表格然后选择Row然后就可以预览相应的值这个预览的值是在将GE附加到ASC上面的时候设置。 在附加的时候我们可以设置Level等级就是曲线表格里面的那个数值。
- 上一篇: 建筑网站推荐知乎江苏徐州网站建设
- 下一篇: 建筑行业官方网站一个简单的个人主页
相关文章
-
建筑网站推荐知乎江苏徐州网站建设
建筑网站推荐知乎江苏徐州网站建设
- 技术栈
- 2026年04月20日
-
建筑网站开发设计网站版权信息的正确写法
建筑网站开发设计网站版权信息的正确写法
- 技术栈
- 2026年04月20日
-
建筑网站的特点怎么做网站筛选功能
建筑网站的特点怎么做网站筛选功能
- 技术栈
- 2026年04月20日
-
建筑行业官方网站一个简单的个人主页
建筑行业官方网站一个简单的个人主页
- 技术栈
- 2026年04月20日
-
建筑营销型网站wordpress卡片式
建筑营销型网站wordpress卡片式
- 技术栈
- 2026年04月20日
-
建筑做文本网站网站设计机构文档
建筑做文本网站网站设计机构文档
- 技术栈
- 2026年04月20日
