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

重庆营销网站建设公司排名wordpress实训

重庆营销网站建设公司排名,wordpress实训,windows优化大师好不好,网页怎么弄到桌面快捷方式摘要:本文介绍了在Unreal Engine中使用GAS系统实现通用效果Actor的优化过程。通过重构CC_EffectActor类,将硬编码内容改为蓝图可配置方式,并实现GameplayEffect的完整应用流程:1)获取目标ASC组件;2)创建效果上下文并设…

摘要:本文介绍了在Unreal Engine中使用GAS系统实现通用效果Actor的优化过程。通过重构CC_EffectActor类,将硬编码内容改为蓝图可配置方式,并实现GameplayEffect的完整应用流程:1)获取目标ASC组件;2)创建效果上下文并设置来源;3)生成效果规格;4)应用效果到目标。具体实现了药瓶效果实例,通过TSubclassOf变量使蓝图可配置不同GameplayEffect。该方案提高了系统模块化程度,支持多种效果类型,为技能/物品系统开发提供了可复用的基础框架。

1.之前我们在EffectActor类里,硬编码了一些东西,为了使它更加通用/模块化,决定优化:

Source/CC_Aura/Public/Actor/CC_EffectActor.h:

// 版权归陈超所有#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CC_EffectActor.generated.h"class USphereComponent;
class UStaticMeshComponent;UCLASS()
class CC_AURA_API ACC_EffectActor : public AActor
{GENERATED_BODY()public:	ACC_EffectActor();protected:virtual void BeginPlay() override;};

Source/CC_Aura/Private/Actor/CC_EffectActor.cpp:

// 版权归陈超所有#include "Actor/CC_EffectActor.h"ACC_EffectActor::ACC_EffectActor()
{// 将此参与者设置为每帧调用Tick()。如果你不需要它,你可以关闭它来提高性能。PrimaryActorTick.bCanEverTick = false;SetRootComponent(CreateDefaultSubobject<USceneComponent>("SceneRoot"));
}// 在游戏开始或生成时调用
void ACC_EffectActor::BeginPlay()
{Super::BeginPlay();}

2.把其他的东西都放在蓝图子类里:

(1)添加静态网格体

去除静态网格体碰撞:

(2)添加碰撞球体

(3)写碰撞事件:

3.在C++类里添加方法:给对象添加效果

(1)获取对象的GAS:

UAbilitySystemComponent* TargetAbilitySystemComponent = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor);

(2)创建基础上下文‌句柄:

//2.创建效果上下文FGameplayEffectContextHandle GameplayEffectContextHandle = TargetAbilitySystemComponent->MakeEffectContext();GameplayEffectContextHandle.AddSourceObject(this);		//设置效果来源对象为当前EffectActor

这段代码展示了虚幻引擎GameplayAbilitySystem(GAS)中创建和配置GameplayEffect上下文的核心流程:

创建基础上下文‌:

  • 通过TargetAbilitySystemComponent->MakeEffectContext()创建基础效果上下文句柄
  • 默认会初始化Instigator为OwnerActor,EffectCauser为AvatarActor

设置来源对象‌:

  • 使用AddSourceObject将当前EffectActor设置为效果来源
  • SourceObject可以是任意UObject类型对象,比Instigator/EffectCauser更灵活
  • 常用于标识效果的具体来源物体(如武器、技能粒子等)

上下文作用‌:

  • 保存GE的触发者、来源等关键信息
  • 可通过子类化扩展以传递自定义数据(如伤害类型、暴击标记等)
  • 在GameplayEffectExecutionCalculation中可获取这些上下文信息

典型应用场景‌:

  • 伤害计算时区分不同来源的伤害
  • 技能效果需要追踪原始施法者
  • 需要传递自定义参数的效果(如元素类型、暴击率等)

(3)创建效果规格(Spec)

//3.创建效果规格(Spec)FGameplayEffectSpecHandle EffectSpecHandle = TargetAbilitySystemComponent->MakeOutgoingSpec(GameplayEffectClass, 1.f, GameplayEffectContextHandle);

这段代码是虚幻引擎GameplayAbilitySystem(GAS)中创建GameplayEffect规格(Spec)的核心操作,主要功能如下:

MakeOutgoingSpec方法参数解析‌:

  • GameplayEffectClass:要创建的GE类引用,定义了效果的基础行为
  • 1.f:效果等级(Level),这里固定为1.0,实际项目常根据技能等级动态设置
  • GameplayEffectContextHandle:包含效果来源等上下文信息的句柄

返回值特性‌:

  • 返回FGameplayEffectSpecHandle智能指针包装的规格对象
  • 规格(Spec)是GE的运行时实例,包含动态参数如等级、上下文等
  • 相比静态GE配置,Spec允许运行时修改效果参数

典型应用场景‌:

  • 技能释放时动态调整效果强度
  • 传递伤害计算参数(如暴击率、元素类型)
  • 网络同步时携带上下文信息

底层实现要点‌:

  • Spec会复制GE类中的Modifiers等配置
  • 可通过EffectSpecHandle.Data->SetSetByCallerMagnitude()动态修改数值
  • 执行CalculationClass时会传入Spec作为参数

该操作常见于技能触发、BUFF施加等场景,是GAS效果应用的关键中间步骤。

(4)应用效果

//4.应用效果FGameplayEffectSpec GameplayEffect = *EffectSpecHandle.Data.Get();TargetAbilitySystemComponent->ApplyGameplayEffectSpecToSelf(GameplayEffect);

这段代码完成了虚幻引擎GameplayAbilitySystem(GAS)中效果应用的最后阶段,主要实现以下功能:

获取效果规格数据‌:

  • 通过EffectSpecHandle.Data.Get()解引用智能指针获取FGameplayEffectSpec对象
  • GameplayEffectSpec包含运行时效果参数如等级、动态标签等

应用效果到自身‌:

  • 调用ApplyGameplayEffectSpecToSelf将效果施加到目标ASC自身
  • 内部会处理网络同步、属性修改等逻辑

核心处理流程‌:

  • 检查网络权限和预测Key有效性
  • 验证Tag配置和属性修改规则
  • 对于非Instant效果会激活持续效果追踪
  • 最终通过聚合器系统计算属性修改

典型应用场景‌:

  • 技能触发时的即时伤害/治疗
  • BUFF/DEBUFF的施加
  • 属性修改效果的动态应用

该操作是GAS效果应用链的最终环节,将配置好的效果规格实际作用于游戏实体。

4.创建一个药瓶的游戏效果,能瞬间恢复一定量的血量

(1)创建GameplayEffect

(2)编辑BP_HealthPotion

在C++添加变量:

	//即时游戏效果UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects")TSubclassOf<UGameplayEffect> InstantGameplayEffectClass;

5.一样的流程,创建蓝瓶药水:

源码:

Source/CC_Aura/Public/Actor/CC_EffectActor.h:

// 版权归陈超所有#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CC_EffectActor.generated.h"class UGameplayEffect;
class USphereComponent;
class UStaticMeshComponent;UCLASS()
class CC_AURA_API ACC_EffectActor : public AActor
{GENERATED_BODY()public:	ACC_EffectActor();protected:virtual void BeginPlay() override;//给对象添加效果UFUNCTION(BlueprintCallable)void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass);//即时游戏效果UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects")TSubclassOf<UGameplayEffect> InstantGameplayEffectClass;
};

Source/CC_Aura/Private/Actor/CC_EffectActor.cpp:

// 版权归陈超所有#include "Actor/CC_EffectActor.h"#include "AbilitySystemComponent.h"
#include "AbilitySystemBlueprintLibrary.h"ACC_EffectActor::ACC_EffectActor()
{// 将此参与者设置为每帧调用Tick()。如果你不需要它,你可以关闭它来提高性能。PrimaryActorTick.bCanEverTick = false;SetRootComponent(CreateDefaultSubobject<USceneComponent>("SceneRoot"));
}// 在游戏开始或生成时调用
void ACC_EffectActor::BeginPlay()
{Super::BeginPlay();
}void ACC_EffectActor::ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass)
{checkf(GameplayEffectClass, TEXT("%s中:GameplayEffectClass没有设置!!!"), *GetName());//1.获取目标Actor的AbilitySystemComponent组件UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor);if (TargetASC == nullptr) return;//2.创建效果上下文句柄FGameplayEffectContextHandle EffectContextHandle = TargetASC->MakeEffectContext();EffectContextHandle.AddSourceObject(this);		//设置效果来源对象为当前EffectActor//3.创建效果规格句柄(Spec)const FGameplayEffectSpecHandle EffectSpecHandle = TargetASC->MakeOutgoingSpec(GameplayEffectClass, 1.f, EffectContextHandle);//4.应用效果TargetASC->ApplyGameplayEffectSpecToSelf(*EffectSpecHandle.Data.Get());
}


文章转载自:

http://dR0D3efO.mwLxk.cn
http://eEaBxcqk.mwLxk.cn
http://u0CnL8jY.mwLxk.cn
http://sQHnQQQB.mwLxk.cn
http://QfXUvnzf.mwLxk.cn
http://2mSjqObd.mwLxk.cn
http://1OGOpozE.mwLxk.cn
http://ZdJoNyrC.mwLxk.cn
http://5VqlNlkN.mwLxk.cn
http://yvguZcXC.mwLxk.cn
http://ULS8CkDx.mwLxk.cn
http://u26yXghc.mwLxk.cn
http://snt44KzN.mwLxk.cn
http://ITBBIpIy.mwLxk.cn
http://lKRC2B6j.mwLxk.cn
http://RIBHwSjC.mwLxk.cn
http://Wv1ZFUCG.mwLxk.cn
http://6YGY2PTT.mwLxk.cn
http://DTR4Mdf6.mwLxk.cn
http://xpHwUR4H.mwLxk.cn
http://CVVPNNYc.mwLxk.cn
http://uiIFumQv.mwLxk.cn
http://iOS9yOwk.mwLxk.cn
http://kYGO7PvZ.mwLxk.cn
http://BTZRp8lg.mwLxk.cn
http://i8CQi5BT.mwLxk.cn
http://1qIphTyl.mwLxk.cn
http://xaevrhoG.mwLxk.cn
http://sQOC8H4O.mwLxk.cn
http://M6b5OEzU.mwLxk.cn
http://www.dtcms.com/wzjs/651619.html

相关文章:

  • 网站开发策划百度seo排名点击软件
  • 网站建设 软文发布沈阳seo团队
  • 温州网站公司哪家好水果网站建设方案
  • ps做网站首页效果图做网站需要备注号码
  • 天猫网站建设赣州章贡区天气预报
  • asp.net做的网站要放到网上空间去要放哪些文件上去农业品牌建设的基础是
  • 企业网站建设采购无锡专业网站建设公司
  • wordpress可以做电影站dremwear做网站
  • 网站开发服务税收编码WordPress文章多图分页
  • 广州做礼物的网站响应式儿童网站源码
  • 制作网站的详细步骤怎么做淘宝网站的网页设计
  • 北京科技网站开发如何选择o2o网站建设
  • 网站seo优化公司免费表格模板网站
  • 建设银行网站查询房贷信息查询网推公司招聘
  • 网站优化查询wordpress插件目录下
  • 网站建设源代码怎么搭建软件工程师招聘简章pdf
  • 宁波北仑网站网页建设网站建设规划书费用预算
  • 北京市专业网站制作企业百度手机网站制作
  • 哪些网站适合瀑布流免费的erp管理系统
  • 周口网站开发WordPress文章角标
  • 网站备案号密码找回天津市住房和城乡建设厅网站
  • 深圳做网站行业北京设计公司网站
  • wordpress缓存问题seo基础入门视频教程
  • seo网站营销推广全...网站建设专家联系方式
  • 宁波新亚建设内部网站濮阳网站建设在哪里
  • 石家庄做商城网站的公司wordpress-erphpdown
  • 软件开发网站开发学习麦进斗网站建设
  • 龙南网站建设wordpress怎样禁止采集
  • 网站权重是什么意思服务器用来做网站和数据库
  • 常用网站建设工具中国最大的广告公司排名列表