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

Unreal Engine 5 C++ Advanced Action RPG 三、四章笔记

Native Gameplay Tags

  • 标签输入操作在这里插入图片描述
  • Native Gameplay Tags
  • 写入标签
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • Input Config Data Asset
  • 新建DataAsset类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • Custom Input Component
  • 新建增强输入组件
    在这里插入图片描述
    在这里插入图片描述

创建动画类继承图

在这里插入图片描述

动画性能笔记

  • 记录
    在这里插入图片描述
    在这里插入图片描述
  • 记录,不然指针永远在空间中没有被回收
    在这里插入图片描述

动画结构

在这里插入图片描述

武器的生成过程

  • 使用GAS系统进行生成
    • 为角色设置能力系统组件
    • 设置生成能力
    • 创建武器类
    • 向角色给予该能力
    • 完成武器的生成
      在这里插入图片描述

为什么使用GAS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 但是如果有了GAS,这个过程就像分配影响标签一样简单
    在这里插入图片描述

给予能力的过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

软引用如何加载到内存

  • 这集很重要!!!
    在这里插入图片描述

战斗组件

在这里插入图片描述

第三章笔记Melee Combo System

16-Handle Unequip Axe

  • 这节课将讨论三件事
    • 取消链接动画层
    • 删除给予能力
    • 删除输入映射上下文
  • 接收到取消装备斧头的事件后,应该将斧头连接到我们的骨骼插槽
    在这里插入图片描述

18-Combo System

  • 为了使用连击系统独立于动画,我们需要在游戏能力蓝图设置能力实例化策略

  • Instanced Per Execution

    • 第一种策略:每次执行时实例化(instanced per execution)
      • 每次我们激活一项能力时,我们都会在世界中生成一个该能力对象的实例。
      • 对于需要不断激活的能力,我们在游戏能力蓝图中拥有的任何变量都将重置回默认值。
      • 但是例如普通攻击能力,每次激活都会为其生成一个实例,这可能会浪费额外的资源
    • 第二种策略:每个演员实例化(Instanced per Actor)
      • 第一次只生成一次实例
      • 每次激活所需的状态存储在内部
    • 第三种策略:非实例化(Non Instanced)
      • 不会生成任何对象
      • 所有逻辑要在C++中实现
        在这里插入图片描述
  • 将LightAttackMaster能力的策略设置为InstancedPerActor
    在这里插入图片描述

  • 用Map来制作连招系统
    在这里插入图片描述
    在这里插入图片描述

21-Warrior Function Library

  • 这节课我们将讨论如何轻击三次后然后按重击直接到重击的第二段

  • 我需要解决的问题

    • 根据当前的设置,我们如何让重击知道我们轻击的连击数?
    • 一旦我们完成重击,我们如何重置连击数?
    • 我们怎样才能拥有一个可以处理连击数量的系统?
  • 解决方案:

    • 首先需要问我们是否即将到达最后一步?

      • 如果答案是否定的,我们只需要正常增加连击数即可
      • 如果答案是肯定的,我们将给到角色一个标签,除了重置的我们的连击计数之外,我们还要注意从我们的英雄角色中删除这个游戏标签
        在这里插入图片描述
    • 在重击中,我们需要问,我们的角色是否有跳转到Jump to Finisher标签?

      • 如果答案是否定的,我们只需要使用当前重击连击数即可
      • 如果答案是肯定的,那么我们应该忽略当前连击数跳转到Jump to Finisher,在结束我们的能力后,除了重置的我们的连击计数之外,我们还要注意从我们的英雄角色中删除这个游戏标签
        在这里插入图片描述
  • 这个函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

23-Slow Motion and Sound FX

  • 使用动画状态通知进行全局时间膨胀
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第四章笔记 Hero Combat

1-Melee Combo System Section Overview

  • 近战连击系统部分概述
    • 我们将从创建敌人角色所需的类开始
      在这里插入图片描述
    • 使用异步加载初始化敌人的启动数据
      • 同步加载:
        • 优点:从加载函数返回加载对象
        • 缺点:阻塞游戏线程
      • 异步加载:
        • 优点:加载发生在后台
        • 缺点:加载的资产突然出现
          在这里插入图片描述
    • 在游戏中引入生命值攻击力等属性,并研究如何使用GE为角色正确初始化属性
      在这里插入图片描述
    • 为武器进行命中检测
      在这里插入图片描述
    • 准备好命中检测后,我们将深入研究应用伤害,并研究如何使用自定义计算类累捕获所有的相关值并计算最终伤害
      在这里插入图片描述
      在这里插入图片描述

2-Challenge Ahead(前方的挑战:指即将面临的困难或挑战。)

  • 造成伤害
    • 为了造成伤害,我们首先需要的我们敌人角色,敌人所需的所有类别
    • 为我们需要为所有角色设置属性(因此为了造成伤害,我们需要不同的属性,例如:生命值、攻击力、防御力等,我们需要一种方法来正确初始化所有角色的属性)
    • 命中检测(这将是我们项目中所有角色都需要的东西,我们需要提出一个解决方案,让我们的玩家和敌人可以使用)
    • 有了命中检测后,我们需要进行自定义伤害计算的方法(如何通过连击来扩大伤害,以及如何兼顾攻击力和防御力)
    • 提出一个解决方案来通知我们的UI(属性的修改,与命中检测一样,需要一个强大的系统,可以适用于游戏中的所有角色)
      在这里插入图片描述
  • 战斗反馈:成功击中后我们需要添加所有角色的
    • 击中反应
    • 声音效果
    • 相机抖动
    • 死亡等内容
      在这里插入图片描述

3-Set Up Enemy Character

  • 设置敌人角色
    • 角色类别
    • 启动数据
    • 游戏能力类别
    • 战斗组件
      在这里插入图片描述

4-Gruntling Guardian

  • 我们不能使用复制敌人蓝图,这样会导致创建的新敌人属性集无效
    在这里插入图片描述
    在这里插入图片描述

5-Asynchronous Loading(异步加载)

  • 异步加载敌人的数据
    在这里插入图片描述
    在这里插入图片描述
  • 异步加载敌人的数据
    在这里插入图片描述
    在这里插入图片描述

7-Attribute Set

  • 设置属性
    在这里插入图片描述
  • 属性表设置
    在这里插入图片描述
    在这里插入图片描述
  • 使用showdebug abilitysystem查看属性
    在这里插入图片描述
    在这里插入图片描述

8-Gameplay Effect

  • 建立曲线表格用来作为属性数据
    在这里插入图片描述
    在这里插入图片描述
  • 这种方法可以直接开始时,让最大血量赋值给当前血量
    在这里插入图片描述

9-Apply Gameplay Effect To Self

  • 将游戏效果应用到目标
  • 在UDataAsset_StartUpDataBase类中,创建一个游戏效果类型的数组,并处理该函数内部的初始化,赋予能力系统组件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

10-Init Enemy Attributes

  • 初始化敌人的属性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 发现测试对不上
    在这里插入图片描述
  • 我们需要添加这两行代码到DefaultGame.ini文件中
  • bUseDebugTargetFromHud = true 的主要作用是允许开发者通过 HUD 界面手动选择一个调试目标,以便更方便地测试和调试与能力系统相关的功能。这有助于提高开发效率,并确保能力或效果能够按照预期工作。
    在这里插入图片描述
    在这里插入图片描述
  • 此时就是对的了
    在这里插入图片描述

11-Pawn Combat Interface

  • 为了造成伤害,我们需要正确的设置命中检测
    在这里插入图片描述

  • 命中检测,我们需要处理四个问题

    • 武器碰撞
    • 命中检查
    • 处理命中
    • 通知结果
      在这里插入图片描述
  • 我们使用动画状态通知来开启武器碰撞与关闭武器碰撞

  • 为了实现武器碰撞,显然需要首先取回我们的武器,在PawnCombatComponent中访问,在PawnCombatComponent中新建一个切换碰撞的函数,然后在动画通知状态中访问这个函数,随时启用和禁用碰撞

  • 但是面临一个问题是如何从这种切换武器碰撞中获取我们的PawnCombatComponent组件?
    在这里插入图片描述

  • 为了,处理这个问题,一种方法是我们可以再次使用按类查找组件的函数来创建一个组件,在我们的通知状态中搜索并检索该战斗组件,但是由于我们需要为游戏中每个角色不断调用这种切换武器碰撞函数,太频繁了
    在这里插入图片描述

  • 所以使用另一种方法就是,在基类Character类中,实现一个接口,这个接口只有一个功能,就是得到PawnCombatComponent组件,它将是一个纯虚函数,然后在基类Character的子类中,他们只需要覆盖这个函数并返回他们自己的PawnCombatComponent组件
    在这里插入图片描述

  • 完成这步后,我们只需要骨骼网格体组件的所有者实现该接口即可
    在这里插入图片描述

13-On Weapon Begin Overlap

  • 现在我们要处理命中检查了,所以我们需要确保武器只能伤害玩家和敌人想要的目标
  • 在武器基类中将为重叠事件创建不同的回调函数,当碰撞框与目标重叠时,我们首先要检查的是我们是否击中了正确的目标,如果不是就不需要做任何事情,如果是,就需要将此信息传递到我们的Combat组件,然后从Combat组件中拿走这个通知,并传递到Process Hit
    在这里插入图片描述

14-On Target Interacted

  • Interacted:adj.互相作用的,vi.相互作用(interact 的过去式和过去分词)
  • 现在我们需要将有效的命中传递到Combat组件
    • 我们在AWarriorWeaponBase类中定义一个委托,声明两个这个委托的变量,用于开始重叠时和结束重叠时的标识
    • 在UPawnCombatComponent类中,新建两个虚函数,注册生成武器的函数中去绑定这个委托到这两个虚函数
    • 然后在玩家和敌人得到CombatComponent组件去重写这两个虚函数就实现了交互功能
      在这里插入图片描述
  • 笔记
    在这里插入图片描述

15-Notify Melee Hit

  • 现在来处理伤害并且通知我们的游戏能力来实施伤害
  • 首先要全部只能伤害目标一次,新建一个用来存储重叠的Actor
    在这里插入图片描述
  • 每次碰撞状态通知结束后,清除一下数组
    在这里插入图片描述
  • 在碰撞时,确保只造成了一次伤害
    在这里插入图片描述
  • 现在来通知我们的游戏能力来实施伤害
  • 当我们轻击时会等待一个游戏事件,这个游戏事件由Combat组件命中到目标后进行发出,然后游戏事件接收到此事件,就会施加伤害
    在这里插入图片描述

http://www.kler.cn/a/461474.html

相关文章:

  • PHP框架+gatewayworker实现在线1对1聊天--发送消息(6)
  • Linux实验报告14-Linux内存管理实验
  • Spring源码分析之事件机制——观察者模式(二)
  • C# 标准数字格式字符串
  • LoRA微调系列笔记
  • OpenLinkSaas使用手册-待办事项和通知中心
  • 1177:奇数单增序列
  • vue中修改局部的elmentUI样式
  • Python将两个视频横向的拼接--视频效果对比
  • yolo数据集 - 2130张边坡排水沟堵塞数据集分享 - 无人机采集与数据增强处理
  • 计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
  • KAFKA入门:原理架构解析
  • 自建私有云相册:Docker一键部署Immich,照片视频备份利器
  • C14.【C++ Cont】string类字符串的push_back、pop_back、字符串+=与+运算和insert
  • 要在 C++ 中实现一个函数,该函数接收一个函数指针 a 并在等待 3 秒后调用它
  • 使用Python实现量子密码学的探索
  • Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本
  • uniapp——微信小程序读取bin文件,解析文件的数据内容(三)
  • 118.杨辉三角120.三角形最小路径和
  • docker加速镜像和加速镜像配置
  • 基于FPGA的辩论赛系统设计-8名选手-正反两方-支持单选手评分-正反两方评分总和
  • 小程序分包优化实践:解决主包过大和vendor.js体积问题
  • C++ 设计模式:中介者模式(Mediator Pattern)
  • khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像
  • 计算机网络 (18)使用广播信道的数据链路层
  • Android中加载一张图片占用的内存