·首先回忆一下之前在制作武器时,如何实现从后背拿武器的。我们创建了一个切换事件,判断当前是否持有武器,然后根据是否持有武器,去修改动画蓝图的变量,来触发从后面拿枪或者是否把枪放了回去。
然后在播放切枪动画时,手伸到背后时,会触发一个动画通知,在动画通知里面,根据动画蓝图里面的变量判断将武器拿到手里或者放回背上。

如果按照这个逻辑扩展武器切换功能的话,那么,我们需要从动画通知入手,创建多个切换动画,然后每个切枪动画设置不同的动画通知,对应不同的武器。在动画蓝图里面,根据枚举去播放不同的切枪动画。还可以使用多种不同的切枪动画,但是我这里没有使用这种方法,而是动画通知去告知角色蓝图去切枪,这样的方法可以实现将枪放回后背的时候,可以直接从后背拿出另外一把枪。
在动画蓝图里面,我们可以使用基于枚举混合动画

在节点上面右键,可以根据枚举增加相应的动画输入

增加输入以后,可以根据传入的枚举值进行选择播放

接下来看一下我实现的武器切换功能

武器变量修改

首先看一下修改后的武器变量

我的制作规则就是角色可以拾取两把武器,为了方便引用,还有一个变量CurrentWeapon来表示当前角色手中拿着的武器。三个命名分别是手部和后背两个部位的插槽的名称。剩余两个状态是,一个是当前角色手中武器的类型,另一个是即将切换到的武器的类型,这个类型就是第一把武器还是第二把武器,后面还有其它的,方便扩充。

切换武器

先走一下切换武器的流程。切换武器之前判断是角色是否身上有武器,现在修改成了判断当前角色身上对应部位的武器,然后调用切换武器判断事件。

切换武器判断事件是根据切换到目标使用的武器类型,然后再根据当前角色当前的情况去调用拿枪还是将枪收起来。

拿枪收枪动画其实是修改了一下之前直接调用,改成了两个事件,还增加了一个只偏移镜头的事件(这个事件是为了实现从地上捡起枪来以后,直接拿到手里,不需要播放从背后掏枪的动画),里面另一方面是为了设置动画蓝图的相关变量,Equip Weapon变量就是为了能够让动画蓝图去播放切枪的动画,所以直接0.1秒就关闭了,防止一直开启,

能够播放切枪动画,就是基于Equip Weapon变量控制的,前面的isWeapon变量是定义角色手上有没有枪,手上有枪那要播放持枪的动画。

然后就到了动画蓝图的切枪动画,然后触发动画通知,手伸到背后的时候触发通知

在动画通知里面,可以获取角色蓝图对象,然后去调用角色蓝图身上的修改武器位置的动画。

修改武器位置事件,主要是为了实现将武器放到它当前情况下应该在的位置。我们现在有当前角色的持有武器的状态,还有一个目标状态。根据这两个状态去判断修改

这样看着比较多,走一遍逻辑,就理解了。
这里主要是处理角色是否需要从后背拿枪,两个状态相同,只需要执行将枪收回即可

往真的分支走,真的分支就是,先判断了一下当前状态是否为null,即相等,又为null,什么时候都不做

后面就是根据当前角色手上持有的武器的状态,将枪放回背上应该放的部位,并将状态设置为了null

拿枪之前,又做了状态修改,就是把目标状态设置给了当前状态,并将目标状态设置为了null,并对当前状态进行判断,是否需要手上持有武器

最后就是根据状态,将那一把武器拿到手上,拿到手上了,并给Current Weapon赋值,主要是方便后面射击时,不用每次需要调用函数去获取当前角色手里拿着的武器类型。

经过这么处理,就实现了多个武器的切换,并且还能后续扩展,重要的是,在切换武器的时候,一个动画里面,可以直接拿另外的一把武器。

拾取武器直接装备到手上

接下来,我又实现了拾取武器直接装备到手上,所以需要在创建武器实例那里增加逻辑,在生成武器这里,我重新封装了一下武器生成函数。角色只能手里拿两把武器。

在生成武器事件里面,还是先实例化类

实例化完成以后,增加了判断当前角色是否持有武器,持有武器的话,那就将武器放到背上。手上没武器,直接往手上放。

往手上放的逻辑,因为前面封装了修改武器位置的函数,所以,我们设置了目标持有武器状态,并调用了动画通知调用的修改武器位置函数,设置镜头偏移。

直接看有点不理解,按第一次拾取武器并放到手上,走一遍修改武器位置的逻辑。

第一块,Weapon State 和 Weapon State Cache肯定不相等的,但是Weapon State肯定为null,所以不会走收枪的分支了。

第二块就是赋值和判断,就是将目标状态设置给Weapon State,分支判断也能通过了

最后,就是就是将武器放到了手上,并设置了当前持有武器。

最后就是持枪镜头偏移,在这里我修改了动画蓝图的状态,并偏移了镜头

结束。

Unreal5 实现武器切换功能相关推荐

  1. 【Unity3D】 Blender2.9+二足角色FPS(TPS)手臂的IK骨骼绑定经验总结

    [Unity3D] Blender2.9+二足角色FPS(TPS)手臂的IK骨骼绑定经验总结 1. IK骨骼绑定 1.1 如何给骨骼设置Custom Object 1.2 如何将左手的Vertex G ...

  2. Unreal5 第三人称射击游戏 射击功能实现1

    状态机的缓存 状态机缓存功能相当于我们只需要实现一次,可以在多个地方引用,也可以在别的状态机里面使用,而不是在里面再重新写一遍相应的功能. 我们可以在基础状态机的链接拉出一条线,搜索"缓存& ...

  3. Unreal5 第三人称射击游戏 射击功能实现2

    上一篇我们实现了角色射击相关的动画以及切换逻辑,并将武器相关的模型添加到角色身上. 这一篇开始制作武器相关的功能. 制作子弹父类 首先创建一个actor类,命名为BP_Bullet,这个作为子弹的通用 ...

  4. Unreal5 第三人称射击游戏 角色基础制作2

    接上一篇 Unreal5 第三人称射击游戏 角色基础制作1 角色蹲伏效果 上面是需要的操作映射,蹲伏实现,首先要开启相应功能,你需要在角色移动组件上面开启可蹲伏 蹲伏还有一些其它设置,比如蹲下角色高度 ...

  5. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。

    maven中有一个大多数人都忽视或者没有用到过的一个功能--install,大多数java开发人员都了解maven,使用maven进行依赖管理.但使用的大多数功能不过是clean清理.compile编 ...

  6. 一个form表单,多个提交按钮(实现不同功能和地址的提交)

    直接上代码 表单部分: <form action="" name="find" method="post" enctype=" ...

  7. nginx介绍及常用功能

    什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...

  8. java action dao_java中Action层、Service层和Dao层的功能区分

    一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...

  9. 窗口键 键位码_键盘上这些被冷落的键位居然有这么强大的功能

    各位小伙伴们大家好啊,又到了达尔优外设小课堂时间了,今天呢,我们将为大家带来的是键盘上的功能区按键小科普,也就是我们常说的F区按键. F区按键 F1~F12这个区域的按键我们通常称为功能键,而F的意思 ...

最新文章

  1. jQuery插件开发(一):jQuery类方法
  2. 借呗利息为什么比银行信用贷款高很多?
  3. Python os.makedirs try 以及 raise
  4. junit测试方法_JUnit测试方法订购
  5. [导入]Google Earth坐标集(能更看清这个世界喽!)
  6. 加密模式 openssl sm4_OpenSSL/GmSSL 动态引擎
  7. python不会英语不会数学怎么自学-英语和数学都不好,但是我想学Python编程可以吗?...
  8. 物流管理系统【前台+后台】(Spring+SpringMVC+MyBatis+vue+shiro)(二)
  9. 要毕业了,兄弟也签了工作。。。
  10. 7月SCI/SSCI期刊变动,警惕这5本被剔除
  11. 488. 祖玛游戏【我亦无他唯手熟尔】
  12. from __future__ imports must occur at the beginning of the file问题的解决
  13. Greenplum删除segment节点
  14. iteye上总结的编程精华资源
  15. 程序员进阶攻略笔记01-10
  16. 项目实战:简易俄罗斯方块(附源码)
  17. Java简繁体转换分享
  18. 中兴事件再起,美国发布“晋华禁令”,这次遭殃的是存储芯片DRAM
  19. nyistOJ-See LCS again(二分)
  20. 霍乱时期的爱情——简写(上)

热门文章

  1. 小米6系统 Android版本,追赶华为! 小米开启安卓8.0系统适配, 小米6最先更新!
  2. 米拓后台的head.php,米拓登录界面后台title和logo修改的方法
  3. 多网站批量蜘蛛日志分析工具
  4. eoc拨号失败服务器无响应,联通广电EOC合作技术方案建议书
  5. 海宇勇创:IDC是互联网的房地产开发商
  6. 引力搜索算法(Gravitational_Search_algorithm,GSA)附matlab代码
  7. dell设置从ssd启动_如何进bios设置ssd固态硬盘为第一启动
  8. 《FPGA学习》->蜂鸣器播放
  9. android仿陌陌tab,uniapp直播室|仿抖音视频|nvue+uniapp高仿陌陌直播
  10. 拼多多店铺订单API接口(pdd.order.basic.list.get订单基础信息列表查询接口)代码对接教程