UE4-TPS游戏

准备工作 

创建人物 

 网格体:

  • 静态网格体
  • 骨骼网格体

添加摄像机前要添加弹簧组件 

创建GameMode(游戏模式)

修改信息

 修改项目的GameMode

创建PlayController (玩家控制器)

创建 GameInstance(游戏实例)

设置

项目设置

 角色移动

创建输入事件

 蓝图

 

 

 人物随摄像机移动,更加形象,不呆板

 

 动画

添加动画

动画设置

 创建之后,点开

创建动作混合

 动画混合设置

创建之后,点开

 进行混合设置

 在动画蓝图中

 在状态机中添加状态

 在状态中添加动作混合

 在动画蓝图的事件图表中

 应用动画蓝图

动画之间的转换

在状态机中添加新状态

 点击条件

添加状态 

 条件

剩余时间比率:UE封装好的函数,检测播放时间 

 为状态添加动画

添加状态

  条件(右边)

 条件(左边)

为状态添加动画

 添加持物品状态

 条件

 创建动作混合(2D)

 骨骼设置

 点击动画混合后

 进行设置

 在动画蓝图时间图表中

 ​​​​​

 在人物事件图表中定义变量,取引用动画蓝图中的变量

 创建函数,用于区分是否持枪

 要让持枪与不持枪状态进行来回切换,需要在状态中添加返回条件

 

武器蓝图 

创建武器蓝图及属性定义

先创建一个父类,然后让子类继承父类(子类既可以继承父类原有属性,又可以拥有自己的属性,提高复用性)

创建一个父类蓝图

创建一个结构体(连续存储,可以存储多个变量,减少内存,提高运行速度)

结构体具体内容

补充结构体

补充结构体

 创建枚举(用常量代表某一个值)

 枚举具体内容

 武器蓝图中(构造,在类生成时就初始化类变量)

补充

初始化参数

 武器蓝图事件图表

逻辑实现

武器蓝图事件图表

通过碰撞体判断是否可以拾取武器

键盘事件

 人物蓝图中

自定义事件

 派生子类

 子类蓝图

 人物插槽

 在骨骼上添加插槽

 在人物上查看骨骼

 在背部添加插槽(背长枪)

 在腿部添加插槽(放置手枪)

 添加预览动画

在子类中插入网格体

 在人物蓝图中,实现拾取的功能

 设置为持有武器,及调整武器位置

 为了让人物持枪后移动正常,修改行动模式

利用Map改进拾取武器功能(利用键值对,可以快速达到切换武器,提高效率)

整体思路图

 首先创建一个Map

 首先判断是否有值(是否有武器),防止出现空值,然后将值(武器)提升为变量

判断手上是否有武器,通过Map查找悬挂武器的插槽是否有值 

手上有武器,判断悬挂插槽是否有武器,如果插槽有值则打印提示信息,没有就将武器添加到悬挂插槽上

将改插槽及武器的对应关系添加到Map中 

手上没武器,判断悬挂插槽是否有值

创建一个变量表示当前的武器

给当前武器赋值 

 悬挂插槽有值就打印信息,没有就将武器装备到手上

 将武器与插槽的对应关系添加到Map中

 更改持枪状态及行动模式

拾取武器UI

创建UI

 UI蓝图界面详情

 UI简单布局

 创建变量,与UI界面进行绑定,进行实时更新数据

 在UI界面进行绑定,绑定创建的变量

 在武器蓝图中添加Widget控件,然后绑定UI,就将武器蓝图与UI关联起来

 将资源导入项目后需要进行一些设置

压缩设置:RGBA
纹理组:UI 

 在武器子类中设置图标,名称等信息,以实现多态

 给武器属性进行赋值

 解决图片一直显示的问题

 

 在武器蓝图中创建一个自定义事件,关闭碰撞体和UI

 在人物蓝图中调用改事件

效果图

 收枪与拔枪

首先添加一个输入设置(按E进行装枪与挂枪的切换)

 在人物蓝图中,添加刚刚设置的输入事件

 根据手上是否有武器,判断要进行的操作,同时更改是否持有武器状态。

 用动画蒙太奇进行装枪与挂枪的优化

  在人物蓝图中添加蒙太奇播放作为通知(选择要播放的动画),同时更改行动模式

创建蒙太奇动画,选中要创建蒙太奇的动画

 打开蒙太奇动画后界面

 在合适的时间帧添加通知

蒙太奇要配合插槽使用

 在默认插槽中选择添加的插槽

 另一个也添加插槽

在动画蓝图中,添加插槽,同时更改插槽为添加的插槽

 动画蓝图最终结果

 在动画蓝图中,添加刚刚创建的通知事件

 在人物蓝图中自定义事件,来配合动画蓝图实现拔枪与收枪事件

 在动画蓝图中调用人物蓝图中的拔枪与收枪事件

 完善人物蓝图中的拔枪与收枪事件

解决没有枪时拔枪的Bug

解决拔枪时停顿问题,添加动作混合

使用新的姿势

  

 Map顺序切换武器

逻辑图

 在项目设置中,按Q切换武器

 在人物蓝图中调用事件(按Q切换武器)

 判断是否能切换武器

 将Map中的数据提升为变量

 查找除了当前手上的武器是否还有其他武器,并将下一个武器的索引提升为变量

 判断是否还存在另一把武器(相当于判断其索引是否有效)

 自定义两个事件(切换武器相当于重复收枪与拔枪的动作),让切换武器的事件调用这两个只定义事件

 如果还存在另一把武器,则将其设置为当前武器,调用自定义事件

 如果该武器为顺序切换武器的最后一把武器,则将当前武器设置为第一把武器

 修改Bug切换武器后武器消失问题,播放蒙太奇动画需要时间

将蒙太奇播放时间提升为变量

 由于蒙太奇的播放速率为2,所以需要除2

按数字切换指定武器

在人物蓝图中,按1切换为手枪

 遍历数组中的元素

 在循环函数中不能有延时函数,将找到的值提升为变量,然后退出循环

 然后调用事件,执行换枪

 

用户界面主UI

创建UI

 UI界面设计

 为进度条(生命值)绑定函数,获取百分比

在人物中定义基本属性

 为图片绑定函数

 创建宏:在开始时隐藏UI,同时给图片传参

宏中结构

 当前子弹绑定函数

 最大子弹绑定函数

 在人物蓝图中让UI可视

 声音

选中需要的声音

在人物蓝图悬挂武器处,添加声音

在人物蓝图装备武器处,添加声音

蒙太奇播放完成后添加声音

 添加脚步声

 打开声音蓝图

 将全部声音,拖入蓝图中

 连接声音

 在ID混合空间中,添加声音的通知

 设置声音通知

 在合适的地方添加通知

 在2D混合空间中,添加声音通知

Map丢弃武器

操作映射(按T丢弃武器)

整体思路图 

在人物蓝图中条用映射

 判断手中是否有武器,并且是否还有另一把武器

 将挂载插槽提升为变量并进行保存

 丢弃武器时,从Map中删除挂载插槽

 获取下一把武器的索引,将其设置为丢弃武器后的当前武器

 当没有武器后,重置Map,让当前武器的索引指向0号位置

 判断还剩多少武器,如果没有武器了,更改行动模式

丢弃武器后,将武器从组件中分离

 运用模拟物理让武器丢在地上

 设置模拟物理需要开启碰撞

 捡枪时关闭模拟物理,否则会捡不起枪

 修改丢枪后捡不起枪的Bug

武器瞄准偏移混合

让武器指向和准心保持一致

 选择骨骼

 混合界面

修改动画,选择需要的帧

 选择适合的动画的帧 

对动画进行设置

 进行参数设置

在武器瞄准蓝图中,将动画进行混合

 将混合空间添加到缓存空间中

 在动画蓝图中

 武器开火

添加武器开火的映射(鼠标左键)

 在人物蓝图中调用映射事件

 

 抬起左键时,时定时器无效

 自定义射击事件,当子弹为0时,停止射击 

 打印提示,添加换弹声音

 关闭定时器

 播放开枪动画,添加开枪声音 

射线检测

射击动画,选择合适动画创建蒙太奇

 蒙太奇设置

 播放蒙太奇

 换弹声音

 射击后子弹数量减一

拉缩镜头与冲刺

点击鼠标右键进行镜头的拉缩

 通过设置摄像机与人的距离达到效果

 时间轴的设置

 松开鼠标反向播放

 冲刺效果

添加映射(左Shift)

 在人物蓝图中

定义一个变量,表示是否在冲刺,同时添加映射事件

 更改行动模式

 冲刺时进行速都混合过渡

时间轴设置

 松开则反向进行

开火动画,选择合适的动画创建蒙太奇,在蒙太奇中

 重装弹药

整体思路

选择合适的动画创建蒙太奇

 更改蒙太奇的插槽

 添加轨道,一个作为声音通知轨道,一个作为事件通知轨道

 在合适的地方添加通知,(拆弹夹通知,轨道1)

 添加通知,那弹夹通知,轨道1

添加通知,装弹夹通知,轨道1

 添加通知,拆弹夹声音,轨道2

添加音效

添加通知,装弹夹声音,轨道2

 添加音效

 装弹逻辑实现思路图

修改

动画蒙太奇触发的事件应该在动画蓝图中进行信息的传递,有动画蓝图将信息传递给人物,人物在执行

在动画蓝图的事件图表中调用动画蒙太奇中的通知

 在人物中自定义对应的事件

 在动画蓝图中调用人物中的自定义事件

 操作映射,按R键进行换弹

 在人物蓝图中,调用映射事件

 判断条件是否符合

 判断是否还有子弹,以及当前子弹能否装完弹夹

修改Bug

 播放蒙太奇动画

 在人物蓝图之定义事件

 将需要换弹的数量提升为变量

 判断剩余弹药的数量是否小于需要的弹药数量

 如果剩余弹药的数量小于需要的弹药数量,将当前弹药数量加上剩余弹药数量作为当前弹药数量,同时将剩余弹药数量设置为0

 如果剩余弹药的数量大于需要的弹药数量。将弹夹弹药数量补满,同时剩余弹药数量减去需要弹药数量

创建弹药蓝图

 初始化弹药

 添加结构体

 对武器蓝图的子蓝图初始化

隐藏部件骨骼(弹夹)

 在左手添加插槽,方便生成一个弹夹

 添加左手拿弹夹动画

 在人物蓝图中生成一个弹夹类

 指定生成的位置

 将生成的弹夹提升为变量

 先开启碰撞后,在进行模拟物理

设置冲量,获取物体的向上向量的反向量

 

让弹夹过一段时间后消失

 修改Bug,换弹夹后会丢枪

 修改弹夹被覆盖后不消失Bug,在弹夹父类中

 在人物蓝图中调用事件销毁

添加场景怪物的动画及UI

创建怪物蓝图

 点击怪物蓝图,进行怪物的初始化

 给怪物创建动画蓝图

 创建动画蓝图的一些设置

 点击动画蓝图。创建状态机

创建混合空间

 点击混合空间,进行设置

 在状态机中添加状态

 点击状态,添加动作混合,并提升为变量

 在怪物的动画蓝图的事件图表中

 将怪物的引用提升为变量

 设置怪物的速度

 在怪物蓝图中添加动画

在怪物蓝图中,创建一个自定义事件,让怪物以自身为圆心随机移动

成功时停顿一段时间,在重复执行怪物移动 

游戏一开始就执行怪物移动事件

修改怪物不移动Bug,指定范围

加入导航网格体,配合AI使用

 细节优化,让怪物不碰撞摄像机,在怪物蓝图中的网格体中

 在怪物蓝图的胶囊体中

 创建怪物的UI,在怪物蓝图中,添加一个组件,同时创建变量

 开始游戏时,初始化怪物的基本属性

 怪物UI布局

在怪物蓝图中创建一个函数,用于更新怪物的UI

 进行类转换,获取怪物UI里的变量

 设置成属性

 游戏开始时调用函数

 控件绑定UI

 伤害机制

创建一个接口

接口界面

 接口实现

 在怪物蓝图中继承接口

在怪物蓝图中 重写接口中的函数以事件的形式

收到攻击而扣血

 更新UI数据

 定义一个变量表示怪物是否死亡

 如果怪物死亡,销毁怪物

 在怪物动画蓝图中,添加一个新状态,表示怪物死亡

 状态之间的转化条件

在死亡的状态中添加动画

 在怪物的动画蓝图的事件图表中

 在人物蓝图中开火处,判断是否继承了接口,可以不用类型转换

 通过接口通知,实现蓝图之间的通信

 细节优化,在人物动画蓝图中,有武器才进行瞄准

 修改一直播放死亡动画的Bug

怪物动画蓝图中

在怪物蓝图中

 关闭循环播放动画

 优化,怪物死亡后关闭怪物的进度条

使用接口让玩家与怪物互相伤害

在怪物蓝图中,创建一个自定义事件,怪物追踪玩家

 怪物追捕玩家

追捕成功则调用攻击玩家事件,否则继续追击 

 创建一个自定义事件,表示怪物攻击玩家

 创建怪物攻击的蒙太奇动画

 在怪物蓝图中添加碰撞体

 在怪物的骨骼体中添加插槽

 将碰撞体绑定在插槽上

 在怪物的攻击动画的蒙太奇中添加通知(开始攻击)

 添加通知,攻击结束

 为蒙太奇添加插槽

绑定插槽

 在怪物动画蓝图中添加并绑定插槽

 在怪物的动画蓝图中调用怪物攻击蒙太奇中的通知

 在怪物蓝图中自定义两个事件

 新建一个变量表示玩家是否正在被攻击,变量的作用:防止攻击完成后,碰撞体碰到玩家

在怪物动画蓝图中调用怪物蓝图中的自定义事件

 怪物的碰撞体与玩家重合时,获取玩家的引用,并将其提升为变量

给人物蓝图中的事件发通知

 在人物蓝图中继承接口

 重写接口中的函数

 发现玩家后如果怪物没死就调用追捕玩家事件

 怪物与玩家碰撞结束后(及攻击完成)

 让怪物循环攻击玩家

创建一个变量表示人物已死亡

 在人物动画蓝图中的状态机中添加新状态,表示人物已死亡

 在死亡状态中添加动画

 在人物动画蓝图中获取人物蓝图中的变量,并将其提升为人物动画蓝图中的变量

 状态转换条件

细节优化

关闭循环播放 

创建一个变量,表示玩家是否死亡 

 人物死亡后,怪物停止攻击,四处移动

小地图制作

用摄像机拍摄地面

 摄像机的设置

 点击生成的图片

 对图片进行一系列的处理,然后就可以删除摄像机了

创建UI

 UI制作,当玩家移动时,相当于地图的平移,将场景地图与指针都设置成变量

在地图UI中获取玩家的引用

将玩家的引用提升为变量,同时设置玩家指针的角度

将人物位置进行转化

 将人物位置在小地图上进行转换

 将小地图UI添加到主UI上

 修复小地图人物位置与场景中不符Bug

 原因:地图比例尺不对

物品描边 

描边思路图

 找到材质,选择实例

对实例进行编辑

在场景中放入一个后期处理体积

 对后期处理体积进行设置(勾选后,场景中所有物品斗需要进行处理)

 在需要描边的物品中(此处为武器蓝图),设置深度 

离开碰撞区后,关闭

 在后期处理体积的细节面板中,选择材质

 背包

思路图分析

 创建背包UI

 点击背包UI

 按B键打开背包,并将背包提升为变量

 将背包UI添加到视口,并将主UI隐藏

 再按B键关闭背包UI

 显示主UI

 创建物品栏UI

 点击物品栏UI

 在背包UI中,添加滚动条,并将其提升为变量

 在背包UI中获取人物的引用,并将其提升为变量

在背包UI中创建一个自定义事件,用于构建物品栏

 创建物品栏UI

 添加到滚动框内

 在物品栏UI中创建一个变量

 为物品栏UI的文本框创建一个绑定函数

 绑定函数

 在背包UI中调用事件

 修改Bug

背包实现逻辑思路图

 对物品进行抽象,建立一个结构体

结构体内的数据 

 创建一个枚举,存放物品类型

 枚举数据

 创建一个枚举,存放物品的Mesh类型

 枚举数据

 创建数据表格

 选择相关联的结构体

 创建一个结构体去调用数据表格中的数据

 结构体内容

补充

创建一个物品类蓝图

添加函数库(作用于全局,可随时调用)

 函数库内容

 通过函数库获取结构体

 补充函数库

 对物品父类

创建一个变量

 首先先判断类型

 根据类型添加对应的网格体

 对网格体进行赋值

 将获得的网格体提升为变量

 创建一个枚举,存放物品所属部位(用于换衣服,蒙皮骨骼)

枚举数据

 函数库模拟数据 

 物品蓝图设置,让物品可以在场景中进行设置

 将物品放入到场景中,并进行设置

方便派生子类,让子类修改数据,实现多态

 物品分类思路图

创建一个组件(实现背包的一些功能)

 组件界面

在组件中创建一个变量,表示背包中的空格子

 创建一个变量,表示背包物品数组

创建一个变量,表示背包数量

在组件中创建一个自定义事件,表示背包的初始化,通过循环添加空格子

 在人物蓝图中调用初始化背包事件

 在组件中添加自定义事件,添加物品

 创建一个函数,添加物品

 创建一个函数,刷新背包

 实现背包添加物品

 在添加物品函数中

将物品信息提升为局部变量

 将物品数量提升为局部变量

 将当前物品名称提升为局部变量

 如果物品可重叠,循环数组

 判断数组中是否已存在改物品

将一个物品格还能装多少物品数量也提升为变量

 判断添加物品的数量是否超过物品最大装载量

 添加成功后,更新背包中的物品数量

 更新当前物品的索引,并置空当前物品格

 对应连线位置

 如果当前物品数量大于所需物品数量

 进行数据设置

 循环结束后,物品数量仍让大于0,建立一个新格子进行存放

 将物品放入到空格子中,并获取其索引

 完善逻辑

在组件中

通过pawn让玩家与背包相关联

 将pawn和玩家控制器都提升为变量

 通过射线检测拾取物品

 判断射线检测碰到的物品的类型

 将拾取物品的引用提升为变量

 创建一个自定义事件

 为了测试,将改变了设置为公开,可以在场景中查看信息

 在人物蓝图中,按F键拾取物品

 射线优化,从头顶发射射线

优化射线检测

 创建拾取物品的准心UI

 准心UI布局

在准心UI中创建一个变量

准心UI的文本进行绑定函数,格式化文本中,{}中即为变量

 通过序列在背包的初始化时,创建背包的UI,并将获取的背包UI的索引提升为变量

 射线检测检测到物品,将物品信息进行传递

 关闭射线检测的射线

修改准心UI不显示Bug,在事件开始时创建UI

 修改Bug射线检测不能检测网格骨骼体

 拾取物品后销毁

 修改提示信息

 修改拾取数量不对Bug

在组件中,对添加物品函数的重写及优化

将被拾取物品的信息,ID,数量提升为局部变量

 判断拾取物品是否可被堆叠

 如果可被堆叠,则遍历数组,查看背包中是否存在该物品并且改物品格是否放满

判断拾取物品的数量是否小于背包中放置该物品格的空闲量

 获取物品的新数量

 更新背包中物品数量

 对背包进行更新,同时对拾取物品格物品格置空

 修改循环,连线关系

 当拾取物品的数量大于背包中放置该物品的物品格剩余所能容纳的数量

 更新背包

补充细节

 

 循环结束后,拾取物品的数量仍让大于0

 创建一个新的物品格进行存放,找到并获取改物品格的引用

 注意:该处也应该判断是否小于背包一个物品格所允许存放的最大数量

不可堆叠物品,直接放入空的物品格中

 在组件中,自定义事件,用于移除背包中的物品

 丢弃物品前进行判断

 使用函数实现丢弃物品的功能

函数的具体实现,将丢弃的物品生成在玩家的附近

 细节化

 调用函数实现功能

 丢弃完物品后对该物品格进行置空

 丢弃的物品数量小于背包中存在的物品数量

 更新背包中的数量

 在组件中自定义事件用于交换物品位置(本质交换物品的索引)

 功能实现

 在人物蓝图中按T键扔物品

 在丢弃函数中设置模拟物理

根据物品ID判断物品的Mesh类型

 如果是静态网格体,直接设置模拟物理,如果是骨骼网格体,需要先开启碰撞,然后再设置模拟物理

创建背包UI

背包UI的布局

 再背包UI中获取组件中背包信息

 将组件的引用提升为变量

 创建自定义事件,用于更新背包

 先清除UI中的信息,然后再重新加入,达到更新背包的目的

循环遍历数组,然后添加物品格

 创建物品格索引和物品格UI

 将物品格的索引设置为变量,同时将物品格添加到背包容器中

 创建物品格UI

 物品格UI布局

 创建一个变量,物品信息

创建一个变量,用于物品格的引用

 在物品格UI中,判断物品ID是否为空

 如果为空,则设置透明度让其看不见,物品信息为空

 如果有,对物品格进行信息设置

 在组件中创建一个自定义事件

 如果打开背包,则创建背包UI

将背包UI的索引提升为变量

 添加函数,用于更改鼠标模式

 调用函数

 关闭背包

 在人物蓝图中,通过按键B来打开关闭背包

优化,在组件中,添加完物品后,销毁物品

 更新背包

 移除物品后,也更新背包

 交换玩物品后也更新背包

在物品格UI中,点击函数重载,选择要重载的函数

 重写的函数

当物品ID不为空时,即该物品格中有物品,执行函数

 选择函数

 侦测是否按下鼠标左键

 重写鼠标点击事件

 重写发现拖动时函数

函数重写的实现

传递拖放的对象

创建拖动时的UI,并进行值传递

 创建拖动过程中显示的UI

 拖动UI

 在拖动UI中创建变量,以及进行赋值

 重写放置时函数

 挂载即拖动的目标,进行类型转换

 与背包组件进行交互

 要交换的物品格的索引

在准心UI中,重写函数,获取拖动的物品,与背包组件相关联,移除背包中的物品,

 在背包UI中

 准心UI

 在物品格UI中,判断按下的是那个键

 创建一个新UI,丢弃确认

 UI布局

创建变量,用于接收信息

 创建一个变量,用于接收索引

在物品格中,创建丢弃物品确认信息的UI

 添加到视口,返回结果

 在丢弃确认UI中

点击取消按钮

 创建新函数,用于格式化文本数字

 具体实现

 补充细节

 将数字传递到文本框中

 调用函数

 点击丢弃时

不同材质产生不同声音

声音优化

添加声音

 草地脚步声

 地板脚步声

 金属脚步声

 创建物理材质蓝图

 在物理材质蓝图中创建一个变量

 创建一个物理材质,草地

 进行设置

  创建一个物理材质,地板

材质实例添加声音

 定义三个物理材质实例

 找到动作混合空间,点击

 找到要设置的动画,原来是直接添加声音 

进行优化,添加通知

 通过通知调用事件发出声音

 在动画蓝图中

在动画蓝图中实现功能,实现通知事件

  进行类型转化

 获取并播放声音

 导入初学者包后,选择合适的材质,点击应用

 优化Tick事件

 小地图UI中

通过绑定触发事件

执行原来Tick执行的事件

在人物蓝图中,创建一个事件分发器

调用事件分发器

 怪物蓝图中

优化怪物一直检测玩家是否死亡

 人物蓝图中创建事件分发器

调用事件,发送通知

 接受通知调用事件

修复Bug,在武器蓝图中关闭输入

创建一个蓝图类,倍镜

 倍镜制作

倍镜蓝图

 

 创建材质

 材质界面介绍

 2D摄像机进行设置

 材质中,进行设置

 初步倍镜设置

 细节设置

 十字准心设置

 

 混合

 

 通过材质创建实例

 打开创建的实例

 在倍镜蓝图中

 创建变量

 启用输入

 离开碰撞区域

在倍镜蓝图中按F键拾取倍镜

 判断是否有效

 在人物蓝图中,自定义事件

 判断装备倍镜的武器

将倍镜添加到武器上

 在武器上添加插槽,装备倍镜

 在倍镜蓝图中

细节方面进行优化

 在物品中添加摄像机模拟开镜

优化开镜,鼠标右键

 创建一个事件分发器

 在主UI中,获取人物索引

 在主UI中开镜后隐藏准心UI

 创建一个事件分发器,不开镜

 在主UI中

 修改Bug,由于之前准心UI是通过函数实现,相当于Tick事件,每帧都会调用,因此事件分发器不起作用

主UI中,删除下面内容

 修改主UI中的函数

 修改

在人物蓝图中,创建一个变量 ,表示是否开镜

倍镜优化及Bug改正

倍镜碰撞设置

 解决射线不是从倍镜处射出问题

判断是否开镜

 如果开镜

进行设置

 修复开镜后镜头不随人物移动而移动

在人物动画蓝图中

 优化开镜,如果没有倍镜

判断是否有倍镜

 False线

 

蒙皮网格实现换装

在任务蓝图中,选择人物初始状态骨骼

 在人物状态中添加蒙皮骨骼

 为蒙皮骨骼选择网格体

 在人物的构建事件中初始化蒙皮骨骼

 新建一个Actor用于换装

 在Actor类中的构建事件中

 创建一个摄像机2D,进行设置 

通过摄像机2D渲染人物

 对摄像机2D拍摄的图片进行设置

 对摄像机2D拍摄大小进行设置,越大视角范围越大

 用贴图创建一个材质

 材质设置

 创建UI控件

UI布局

 装备插槽UI

 UI布局

在UI控件中调用其他UI

 在人物蓝图中,按V键

 将插槽UI的引用提升为变量

 创建一个函数,更改鼠标模式

 调用函数

 修改Bug

先生成人物的镜像,同时将镜像的索引提升为变量,从而获取贴图,将其赋值给UI,在创建UI

 在按一次,移除UI,同时销毁人物镜像

 修改Bug

修改贴图的锚点,改成锚中间,图片大小要保持一致

优化换装,用组件完成

创建一个组件

 在人物蓝图中添加组件

 在换装主UI中,设置插槽UI中文本内容

 在换装组件中,自定义事件用于打开人物状态栏

生成人物镜像,并将索引提升为变量

 生成换装主UI,并将其索引提升为变量,添加到视口中

 设置鼠标模式

 关闭UI显示

 设置鼠标模式

 优化,如果存在人物镜像的索引,表示已经创建了,只需要可示即可

 在人物蓝图中,按V键进行打开/关闭

 使用基本物品蓝图作为父类,派生出服装蓝图

 创建一个结构体,存储头部,手部....等信息,让人物与人物镜像保持一致

结构体内数据

 在人物镜像中创建一个变量

 在人物镜像创建时就进行服装赋值

 在换装组件中创建一个变量

 创建一个枚举,用于表明服装所属部位

 枚举具体内容

在基本物品的结构体中进行补充,用于与枚举进行关联

 在基本物品蓝图中

在换装组件中一开始就获取玩家的引用,并将其提升为变量

 换装系统之装备栏数据传递

换装思路图

 在换装插槽中创建一个变量

在换装插槽UI中创建一个变量,存放拖放过来的物品的信息

创建一个变量,定义该插槽属于哪一个部位

 在换装主UI中,初始化换装插槽的类型

 在换装插槽UI中重写,放置时函数

 转换成背包UI,获取其索引,通过索引获取背包信息

 判断从背包中拖放的物品类型是否与换装插槽类型相同

 判断换装插槽是否为空

如果为空,直接给换装插槽赋值

 对换装插槽进行设置

 在换装插槽的事件图表中,获取背包组件的索引,并提升为变量

 获取背包中拖放物品的索引和数量

 移除背包中的物品

调用更新事件

 在换装UI的事件图表中获取换装组件的索引,并将其提升为变量

 在换装组件中自定义事件,用于更新

 分别对结构体进行设置,更新其中的数据

 设置更新网格体

 对人物镜像进行更新

 在人物镜像蓝图中,自定义事件进行更新

保存背包中拖放的物品信息

 进行换装插槽的设置

 移除背包中的物品信息

 将换装插槽中的物品添加到背包中

 更改换装插槽中的物品信息,进行数据更新

 在换装插槽中重写,按下鼠标函数

 按下鼠标函数

 重写发现拖动时函数

托放函数

 在背包中,获取换装插槽中的物品信息,并将其添加到背包中

 对换装插槽进行设置

 在换装插槽中,自定义事件,进行更新。移除后给定默认值

从上面复制然后进行改动

 

 改动处

 给网格体默认值

在换装插槽UI中清除蒙皮信息

 在换装插槽UI中清除物品信息

创建一个局部变量,用于空信息

 完成函数的节点标志

当物体没有碰撞时,解决方法

 

 优化武器系统

创建一个武器组件

 在人物蓝图中添加武器组件

 可以将之前在人物蓝图中的武器事件移到武器组件中

以基本物品为父类,派生出武器蓝图子类

 创建武器的结构体

结构体具体内容

 创建一个枚举,用于表示武器的类型

枚举具体内容

 创建一个枚举类型,用于表示射击类型

枚举具体内容

 创建一个枚举,表示弹道类型

 枚举具体内容

 创建一个子弹蓝图,用于伤害的传递

创建子弹的结构体

结构体具体内容

创建一个枚举,表示子弹的型号

 枚举具体内容

 在子弹蓝图中添加组件

 添加碰撞体,并且以该碰撞体为根

 在子弹蓝图的构造函数中

 通过序列实现模型和粒子系统的添加

 创建一个变量,存放子弹信息

 设置网格体与粒子

 提升为变量

 设置子弹速度

 初始化子弹信息

 在武器蓝图中创建一个变量,存放武器信息

 在武器蓝图的构造函数中,初始化武器信息

创建一个特效类蓝图

 创建特效的结构体

结构体具体内容

 在特效蓝图中创建一个变量,存放特效信息

 在特效蓝图中写逻辑的实现

 创建一个变量,表示子弹的命中结果

是否产生碰撞

 生成物理材质

 初始化物理材质

 在项目设置中定义物理材质表面

 创建物理材质

 选择基类

 点击生成的蓝图,进行设置

 创建合适的物理材质,并进行设置

 给场景中的物体选择物理材质

 为角色选择物理材质

 生成声音(序列2)

 初始化声音

计算贴花生成位置

 通过计算得出贴花旋转位置,并将其提升为变量

  生成贴花,即子弹打在物体表面产生的效果

 属性设置

 按生命周期进行销毁

 子弹类实现

创建一个函数,发射物碰撞停止时

  将命中结果提升为临时变量

  调用径向爆炸函数

通过判断是否实现接口,从而避免了类型转化

 造成伤害,实现人物与怪物之间的蓝图通信,即信息传递

隐藏子弹

 通过武器组件获取武器信息,从而获取特效贴花

 通过自身引用生成贴花

 在子弹碰撞出生成贴花

 对生成贴花进行设置

创建一个函数,表示径向爆炸

将命中结果提升为变量

 通过球体重合检测范围内的物体,检测中心,检测半径,要检测的类

 忽略的类,忽略本身武器

 通过循环检测类是否实现了接口

 调用接口内的函数 

 生成爆炸蓝图

 爆炸蓝图中变量的设置

 设置后的效果

 生成爆炸蓝图,具体化属性

 在子弹蓝图的事件图表中

 创建一个接口

 接口内实现函数

 在怪物蓝图中,添加接口

 实现接口

 在武器组件中定义变量,表示当前武器

 创建一个蓝图,表示爆炸

 在爆炸蓝图中添加组件

 在爆炸蓝图的构造函数中创建两个变量,并分别进行设置

 在爆炸蓝图的事件图表中

武器数据测试

将武器蓝图放入场景中,并进行赋值

基本物品类

 武器信息

 在人物中添加武器插槽

 在插槽中添加武器

 预览动画

 在背包组件中,拾取物品事件中,判断是否是武器,不是直接放入背包中

挂载武器

在武器组件中,获取人物引用

创建自定义事件,传入武器蓝图的引用,用于挂载或装备武器

 完成挂载功能

将拾取的武器的索引提升为变量

创建自定义事件,用于开火,传入一个布尔变量

 有间隔的进行开火

 播放开火动画

 更新子弹数,调用函数(创建弹道)

 创建一个函数,创建弹道

 判断武器弹道类型

 射出子弹

 让子弹从枪口处射出(选择枪口插槽)

 生成子弹

测试,在人物蓝图中测试开火

 修改Bug

 在子弹蓝图中

修改前

 修改后

 子弹蓝图中

修改前

 修改后

在武器组件中创建一个变量,表示是否持有武器

 在基本物品中,进行碰撞设置

 更改子弹碰撞

 优化武器挂载

在武器组件中,自定义事件,用于挂载或装备武器,传入武器蓝图的引用

 将拾取的武器的索引提升为变量

 关闭拾取武器的模拟物理与碰撞

 创建变量,将其设置成Map容器

 判断是否有武器,如果没有,将其装备到手上

 如果没有武器,将拾取的武器赋值给当前武器,并将其装备到手上

 将主插槽提升为变量,方便通过插槽找到武器

 将插槽(key)和武器(value)添加到Map中,表示手上有武器

 创建一个布尔变量,是否挂载成功

 判断武器的挂载插槽是否有值

 通过key查找武器插槽是否有值,如果不为-1,有值,为-1,无值

 主插槽为空时

 将武器挂载到主插槽上

 挂载成功后,添加到Map中,表示主插槽已被占用

 设置变量

 主插槽被占用,判断副插槽是否为空

 判断副插槽是否为空

 若副插槽为空,将武器挂载到副插槽上

添加到Map中,表示副插槽已满,同时设置变量

 若副插槽为空,则将武器放入背包中,设置变量

添加挂载音效

 在背包组件中,判断是否挂载成功

调用事件

 挂载成功,将武器描边UI关闭,没有成功,则将武器放入背包中

 

 

优化装备武器

在武器组件中,自定义事件,装备武器,进行一些判断

 根据手里是否有武器更改人物行动模式

 播放蒙太奇动画

 选择合适的动画 ,然后创建蒙太奇,在对动画蒙太奇进行设置

在人物动画蓝图中,对蒙太奇中的通进行反馈

 在人物动画蓝图中,添加新的状态与插槽

 使用新的姿势

在武器组件中,自定义两个事件,一个用于装备武器,一个用于挂载武器

 将武器进行装备

 添加装备武器音效

挂载武器,通过key进行循环遍历

 判断查找的插槽是否为当前武器的插槽,并将查找的插槽的索引提升为变量

 找到了,就将武器进行挂载

 将武器挂载并添加挂载音效

 在人物动画蓝图中调用事件

判断手上是否有武器,若值(手上有武器)调用装备事件,若值(手上没有武器)调用挂载事件

 在人物蓝图中,按E键进行装备或挂载武器

 修改Bug

 第一把武器应装备到手上

 持枪动画

 人物偏移

切换武器

在武器组件中,创建自定义事件,顺序切换武器

 创建播放切换武器的蒙太奇

 在人物动画蓝图中,创建事件分发器,发出信号

获取人物动画蓝图的索引,并接受信号,然后调用事件

 判断武器数量,如果小于等于1,不进行武器切换

 将Map中的value(武器,及人物身上的武器)存入数组中

判断当前武器的下一个索引是否为有效索引(数组中当前武器的下一个位置的值是否有效)

 将下一把武器的索引提升为变量

 如果存在下一把武器,将当前武器进行挂载,下一把武器设置为当前武器,装备到手上

 如果没有下一把武器,从数组中第一个元素开始

 在人物蓝图中按Q键进行顺序切换武器

 在武器组件中,创建自定义事件,一键切换指定武器

 通过value循环遍历

 将循环遍历的值进行比较,同时将循环遍历的值提升为变量

 循环结束

 

通过事件分发器实现切换武器

 在人物蓝图中,按1键切换武器

武器开火

修改Bug,拾取到背包后仍有提示信息

 在武器组件中创建一个自定义事件,开火,传入一个布尔变量

 判断条件

 创建一个布尔变量,判断是否为连发武器

 用 以事件设置定时器 来达到连发效果

 将定时器的索引提升为变量

 判断武器中是否还有子弹

 添加音效

取消定时器

 当还有子弹时,用序列播放开火蒙太奇

选择合适的动画创建动画蒙太奇,在动画蒙太奇中进行设置

 在人物动画蓝图中添加插槽

 开火的动画序列

 子弹数减一

 根据类型创建弹道

 创建一个函数,用于创建子弹弹道,传入人物引用

 获取摄像机的索引并将其设置为变量

 射线检测

碰撞结果

 让子弹从枪口射出

 常见变换

 生成子弹

根据类型,选择创建的子弹弹道

 散射弹道

 

 修改优化创建弹道

 创建一个函数,抛出空弹壳

 单发武器开火

 

 清除定时器

 在人物蓝图中按鼠标左键进行事件调用

添加碰撞

 子弹蓝图碰撞设置

 

抛弹壳

抛出空弹壳函数中,生成空弹壳

创建一个空弹壳类

 空弹壳类

 创建一个变量,存放子弹信息

 在构造函数中

 添加径向冲力

销毁空弹壳

 空子弹碰撞设置

 修改Bug,修改适合的质量,冲力大小

 抛弹壳具体蓝图

 简易开镜,鼠标右键

 空弹壳蓝图 ,添加音效

 音效播放条件

在武器组件中,判断是否需要抛弹壳 

优化重装弹药

在武器组件中,自定义事件,重装弹药,先判断条件

 换弹条件判断

 播放蒙太奇和动画序列

在武器组件中自定义事件

 选择合适的动画创建蒙太奇,在蒙太奇中进行设置

 在人物动画蓝图中添加插槽

 在人物动画蓝图中接收蒙太奇中的通知

 换弹逻辑实现,判断条件,最大弹药量是否为0

 换弹量于弹夹量进行比较

 更新结构体中的数据

 

 在人物蓝图中,按R键进行换弹

 修改Bug,在武器组件中

后坐力系统

在人物或者武器蓝图中自定义事件(时间轴只能写在类中)

 时间轴定义

 摄像机角度设置,向上为负,向下为正

创建自定义事件,重置后坐力

 创建自定义事件,停止摄像机晃动

 调用事件

 左右晃动

 在武器组件中调用事件

伤害传递

创建接口,在怪物蓝图中调用接口中定义的函数,创建变量

 在构造函数中初始化人物属性

 获取武器组件的引用,并将其提升为变量

 创建一个函数,计算所受到的伤害,传入所受到的伤害,命中结果

具体实现

 实现接口事件,同时函数传出一个结果

 创建一个函数,更新生命值,传入伤害,传出是否死了

具体实现

 

 创建一个函数,怪物是否死了,传入命中结果

 具体实现

 范围伤害接口事件

 创建一个函数,传入命中结果,武器信息,传出伤害值

 具体实现,获取爆炸物落点,并将其提升为局部变量

 根据怪物与爆炸物落点的距离,计算伤害

 

 修改Bug

优化开镜 

 创建UI

 UI布局

 在人物蓝图中

 设置开镜后的视野

 创建UI并添加到视口中,将UI提升为变量

 

 

优化武器UI

创建UI

UI布局

获取武器组件的引用,并将其提升为变量

 在武器组件中定义一个事件分发器,传入武器的引用

 需要发信号的地方

 

 

 绑定事件,调用事件

自定义事件,传入武器信息

 更具手上是否有武器,决定显示或隐藏武器UI

 将当前武器信息的引用提升为变量

 初始化武器UI信息

设置可视性

没有武器是隐藏武器UI

在武器组件中创建武器UI 

 动态准心UI

 创建UI

 UI布局

创建变量,播放动画

 

 在怪物蓝图的接口事件处

AI

创建AI控制器

 在要控制的AI蓝图中,选择AIController

 添加导航网格

 创建行为树

 在AIController中运行行为树

添加服务,在服务中写逻辑

新建任务,清空时间,在任务中写逻辑

 新建任务,随机找点

 添加AI感知组件

 对AI的感知进行设置

在AI要感知的物体中添加感知刺激组件

 刺激组件设置

 在AIController中写当AI感知到刺激时朝刺激源移动

 将刺激源位置存到黑板中

在黑板中创建变量存放刺激源位置

 设置keyname

优化

 行为树

 修改Bug,只跟随一次

 黑板修改

 行为树

修改Keyname

 

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值