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

RPG9.修改武器GA

1.打开GA,对武器基类进行修改。这样子即完成了武器基类的描写

2.基于武器基类,创建一个子类,该子类为玩家手上的武器。

3.打开角色的骨骼,在该骨骼内创建一个插槽

4.调整到好的位置

5. 打开创建好的玩家手上的武器GA,设置好对应的类,附加的骨骼也对应好。

6.在Data内创建一个C++类,用于在启动游戏时对角色Ability的初始化

7.在新建的Data内创建两个变量

protected://角色初始能力UPROPERTY(EditDefaultsOnly, Category = "StartUpData")TArray<TSubclassOf<UXMBGameplayAbility>> ActivateOnGivenAbilities;//有触发条件的能力UPROPERTY(EditDefaultsOnly, Category = "StartUpData")TArray<TSubclassOf<UXMBGameplayAbility>> ReactiveAbilities;

然后再创建一个将Ability设置给ASC的函数

Protected:
//设置ASC能力void GrantAbilities(const TArray<TSubclassOf<UXMBGameplayAbility>> &InAbilitiesToGive,UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel = 1);

再创建一个调用GrantAbilities()的函数,将能力赋予给ASC

public://将能力赋予ASCvirtual void GiveToAbilitySystemComponent(UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel = 1);

8.设置GrantAbilities()

void UDataAsset_StartUpDataBase::GrantAbilities(const TArray<TSubclassOf<UXMBGameplayAbility>>& InAbilitiesToGive,UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel)
{if (InAbilitiesToGive.IsEmpty()){return;}for (const TSubclassOf<UXMBGameplayAbility>& Ability : InAbilitiesToGive){if (!Ability) continue;向玩家的能力系统组件授予一组能力FGameplayAbilitySpec AbilitySpec(Ability);AbilitySpec.SourceObject = InXMBASCToGive->GetAvatarActor();AbilitySpec.Level = ApplyLevel;InXMBASCToGive->GiveAbility(AbilitySpec);}
}

9.设置GiveToAbilitySystemComponent

void UDataAsset_StartUpDataBase::GiveToAbilitySystemComponent(UXMBAbilitySystemComponent* InXMBASCToGive,int32 ApplyLevel)
{check(InXMBASCToGive);GrantAbilities(ActivateOnGivenAbilities, InXMBASCToGive, ApplyLevel);GrantAbilities(ReactiveAbilities, InXMBASCToGive, ApplyLevel);
}

10.启动项目,创建该类的子类

11.创建子类的蓝图,可以看到里面有两个可设置的数组

12.这个数据资产将会保留所有GameAbility的引用

在Character内创建一个数据资产的引用

//创建数据资产的引用UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CharacterData")TSoftObjectPtr<UDataAsset_XMBStartUpData> CharacterStartUpData;

创建好改引用后,应该在角色内读取该资产的内容并应用于角色的ASC(因为该资产只存GA,所以直接应用就好)

13.在玩家类的Possesseny()内

void AXMBCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);//if (!CharacterStartUpData.IsNull()){//使用异步加载的方式尝试加载数据if (UDataAsset_XMBStartUpData* LoadedData = CharacterStartUpData.LoadSynchronous()){LoadedData->GiveToAbilitySystemComponent(XMBAbilitySystemComponent);}}
}

14.现在已经完成数据资产的设置了,启动项目,打开玩家角色蓝图

15.打开生成武器的GA,修改这两个变量的默认值

相关文章:

  • 【软件设计师:数据结构】2.数据结构基础(二)
  • 《Python星球日记》 第45天:KNN 与 SVM 分类器
  • C语言 指针(8)
  • 从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」
  • STM32的网络天气时钟项目
  • Kafka Controller的作用是什么?故障时如何恢复? (管理分区和副本状态;通过ZooKeeper选举新Controller)
  • 理解与清理 Docker 中的悬空镜像(Dangling Images)
  • 大语言模型中的“温度”参数到底是什么?如何正确设置?
  • 终端安全登录系统的必要性及安当SLA双因素认证解决方案深度解析
  • MySQL基础关键_010_数据库设计三范式
  • 7.2.安全防御
  • Java版ERP管理系统源码(springboot+VUE+Uniapp)
  • Android学习总结之MMKV(代替SharedPreferences)
  • 远程访问代理+内网穿透:火山引擎边缘网关助力自部署模型公网调用与全链路管控
  • 【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II
  • Kubernetes集群生产环境智能伸缩指南
  • 数据分析案例(2)
  • [量化交易Backtrader] - 如何规避过拟合
  • 无网络环境下配置并运行 word2vec复现.py
  • 大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​
  • 快评|印巴为何停火?已达成“一场胜利,各自表述”的效果
  • 上报集团社长李芸:发挥媒体优势,让中非民心在数字时代更深层互联互通
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 临港新片区:发布再保险、国际航运、生物医药3个领域数据出境操作指引
  • 悬疑推理联合书单|虫神山事件
  • 乌克兰议会批准美乌矿产协议