王树贤
王树贤
# 5. RPG Game UI 游戏UI 控件组件 https://docs.unrealengine.com/5.3/zh-CN/widget-components-in-unreal-engine/ ## 1. Game UI Architecture 游戏UI架构 屏幕上显示的对象称为小控件Widgets。 在虚幻中,我们创建小控件蓝图来提供游戏数据的可视化表示。 继承自UUserWidget。 小控件对象可以通过多种方式设法深入游戏代码,检索角色控制器、玩家状态、技能系统组件的指针和引用,属性集并直接访问所需的所有数据。 但这不是最好的方法。  在一个结构良好的程序中,应该分离关注点。 用户界面有三个不同的域。  1-View 第一个领域是数据视觉效果的展示,例如生命条和能力图标。 基本上所有的小控件,我们将这个域称为视图,因为它包含玩家玩游戏时的视图的所有内容。 2-Model 数据本身 玩家的生命值,玩家的等级,法力经验,技能已被解锁,它们的级别是什么以及这些技能被分配到哪些按钮。 所有这些数据都存在于游戏项目本身的代码库中,我们将这些数据称为模型,因为它对游戏的基本规则和结果进行建模。...
# 6. Gameplay Effects / Gameplay效果 https://docs.unrealengine.com/5.3/zh-CN/gameplay-effects-for-the-gameplay-ability-system-in-unreal-engine/ Gameplay技能系统会利用 Gameplay效果 更改Gameplay技能所针对Actor的属性。Gameplay效果包含你可以应用到Actor属性的函数库。这些效果可以是即时效果,比如施加伤害,也可以是持续效果,比如毒杀,在一定的时间内对角色造成伤害。 你可以使用Gameplay技能效果进行增益和减益。 根据你的游戏设计,让你的角色变得更强或更弱。 Gameplay效果属于资产,因此在运行时不可变。 也有例外情况,例如,当在运行时创建Gameplay效果,但未在创建和配置时修改数据的情况。 Gameplay效果规格 是Gameplay效果的运行时版本。 它们是Gameplay效果的实例数据封装器(Gameplay效果是一种资产)。 蓝图功能本身与Gameplay效果规格相关,而不是与Gameplay效果相关,这体现在技能系统蓝图库中。 Gameplay效果规格会添加到Actor的技能系统组件。 这适用于持续效果,并且可以设置为在失效前具有有限的生命周期,然后删除效果,撤销对目标Actor Gameplay属性 的更改。 ### Gameplay效果生命周期 Gameplay效果的 时长(Duration) 可设置为 即时(Instant) 、 无限(Infinite)...
# 7. Gameplay Tags / Gameplay标签 分层标签系 https://docs.unrealengine.com/5.3/zh-CN/using-gameplay-tags-in-unreal-engine/ Gameplay标签(Gameplay Tags) 是用户定义的字符串,充当概念性的分层标签。你可以将Gameplay标签应用于项目中的对象,并对其求值以驱动你的Gameplay实现,类似于检查布尔值或标记。 你可以使用它们传达许多不同的概念,包括以下概念: 对象的属性,例如 Character.Enemy.Zombie 对象在执行或能够执行的事情,例如 Movement.Mode.Swimming 游戏事件和触发器,例如 GameplayEvent.RequestReset Gameplay标签可以有任意数量的分层级别,以 . 字符分隔表示。例如,标签 Event.Movement.Dash 有三个级别,其中 Event 是层级中最宽泛的标识符,而 Dash 是最具体的。 ## 1. Gameplay...
# 8. RPG Attributes RPG属性 ## 1. Initialize Attributes from a Data Table 使用数据表初始化属性 在 构造函数中直接初始化函数值不是首选方案。 使用数据表初始化属性也不是,此处使用数据表仅作学习。 【使用游戏效果初始化属性是推荐方案】 初始化主属性。 `Source/Aura/Public/Player/AuraPlayerState.h` ```h protected: // 技能系统组件 // 公开给蓝图,以为其设置数据表属性 UPROPERTY(VisibleAnywhere) TObjectPtr AbilitySystemComponent; ```...
# 9. Attribute Menu 属性菜单 ## 1. Attribute Menu - Game Plan 属性菜单-游戏规划   ## 2. Attribute Menu - Framed Value 属性菜单-框架值 WBP_FramedValue 在 目录 Blueprint-UI-AttributeMenu 基于 AuraUserWidget-右键-用户界面-控件蓝图 创建...
# 10. Gameplay Abilities 游戏技能 ## 1. Gameplay Abilities 游戏技能    游戏技能: 定义技能或技能的类 必须被授予 -在服务器上授予 -Spec复制到拥有客户端 必须激活才能使用 成本和冷却时间 技能异步运行 -一次多个活动 技能任务 -异步执行操作xin ## 2. Granting Abilities 2.授予技能 ###...
# 11. Ability Tasks 技能任务 https://docs.unrealengine.com/5.3/zh-CN/gameplay-ability-tasks-in-unreal-engine/ ## 1. Ability Tasks 技能任务(C++类"UAbilityTask")是更常规的技能任务类的特殊形式,旨在使用游戏性技能。使用游戏性技能系统的游戏通常包括各种自定义技能任务,这些任务实施其独特的游戏功能。它们在游戏性技能执行过程中执行异步工作,并且能够通过调用[委托(Delegate)](https://docs.unrealengine.com/5.3/zh-CN/delegates-and-lamba-functions-in-unreal-engine) (在本地C++代码中)或移经一个或多个输出执行引脚(在蓝图中)来影响执行流。这使技能能够跨多个帧执行,并可在同一帧内执行多个不同的函数。大部分技能任务都有一个即时触发的执行引脚,使蓝图能够在任务开始后继续执行。此外,通常还有一些特定于任务的引脚,它们会在延迟后或在可能发生或不发生的某个事件之后触发。 技能任务可以通过调用"EndTask"函数自行终止,或者等待运行它的游戏性技能结束,此时它会自动终止。这可以防止幻影技能任务运行,有效地泄漏CPU周期和内存。例如,某个技能任务可能播放一个施法动画,而另一个任务则在玩家的瞄准点处放置一个靶向标线。如果玩家点击确认输入来施放该法术,或者等待动画结束而未确认该法术,游戏性技能就会结束。虽然它们可以在任何时候自动终止,但是技能任务保证最晚在主要技能结束时终止。 技能任务设计用于网络环境和非网络环境,但它们不会通过网络直接更新自己。它们通常是间接保持同步的,因为它们是由游戏性技能(会进行复制)创建,并且使用复制的信息(例如玩家输入或网络变量)来确定它们的执行流。 近战攻击游戏性技能,在蓝图中实施。中央的"播放蒙太奇并等待事件"技能任务是ActionRPG样本的一部分。  ### 在技能 GA_FireBolt 中 使用预制游戏任务 技能任务像用来完成游戏技能的工人,要么立即完成,要么跨越一段时间。 游戏技能系统中已经存在许多任务。 也可以自己创建游戏任务。 打开 GA_FireBolt 技能 图表: #### :...
# 12. RPG Character Classes / RPG角色职业 ## 1. RPG Character Classes / RPG角色职业   ## 2. Character Class Info 角色职业信息 ### 存储所有相关角色的所有数据 CharacterClassInfo C++ 数据资产 基于 DataAsset 新建...
# 13. Damage 伤害 ## 1. Meta Attributes 元属性 到目前为止,影响健康的游戏效果正在影响属性集并改变健康的值。 在更复杂的角色扮演游戏中,通常不会这样做。 因为,例如,每当我们对敌人造成伤害时,都会进行许多计算. 并且这些计算与攻击者和受害者的属性有关. 为了保持数学简单,我们经常使用占位符属性,其行为作为中介,允许我们实际执行设定健康值之前需要执行的所有数学运算。 这些中间值称为元属性。 ### 元属性和普通属性之间的区别: 普通属性通常会被复制,并且可以在服务器上更改并复制到客户端。 元属性不会被复制,它实际上只是一个临时占位符。 仅在服务器上使用这些来执行计算,执行这些计算后可以将更改并应用于重要的真实属性上。  例如,在损坏的情况下,我们可能有一个称为传入损坏的元属性。 元属性已经不再复制。 假设游戏效果将施加伤害。 假设这个游戏效果显示我对你造成 11 点伤害。 游戏效果将增加元属性生命值,而不是减去受害者的 11。 元属性执行所有修改器的计算。...
# 14. Advanced Damage Techniques 高级伤害技术 ## 1. The Gameplay Effect Context 游戏效果情景 魔法投射技能中,为游戏情景添加技能,源对象,投射物,技能命中结果。 弱对象指针是智能指针。 它们是可以存储指针的包装器,而弱对象指针有一个属性,就是不获取它所存储的指针的所有权。 即,它不参与引用计数。垃圾收集不会跟踪它。 弱引用指针就代表“我指向这东西,但这东西什么时候释放不关我事儿……” `Source/Aura/Private/AbilitySystem/Abilities/AuraProjectileSpell.cpp` ```cpp void UAuraProjectileSpell::SpawnProjectile(const FVector& ProjectileTargetLocation) { // 只在服务端生成投射物,服务器处理投射物的移动,位置等 // 需要投射物可以网络复制,客户端可以看到复制版本 const...