Unreal5 实现武器切换功能

news2024/11/26 13:45:37

·首先回忆一下之前在制作武器时,如何实现从后背拿武器的。我们创建了一个切换事件,判断当前是否持有武器,然后根据是否持有武器,去修改动画蓝图的变量,来触发从后面拿枪或者是否把枪放了回去。
然后在播放切枪动画时,手伸到背后时,会触发一个动画通知,在动画通知里面,根据动画蓝图里面的变量判断将武器拿到手里或者放回背上。
在这里插入图片描述
如果按照这个逻辑扩展武器切换功能的话,那么,我们需要从动画通知入手,创建多个切换动画,然后每个切枪动画设置不同的动画通知,对应不同的武器。在动画蓝图里面,根据枚举去播放不同的切枪动画。还可以使用多种不同的切枪动画,但是我这里没有使用这种方法,而是动画通知去告知角色蓝图去切枪,这样的方法可以实现将枪放回后背的时候,可以直接从后背拿出另外一把枪。
接下来看一下我实现的武器切换功能

武器变量修改

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

切换武器

先走一下切换武器的流程。切换武器之前判断是角色是否身上有武器,现在修改成了判断当前角色身上对应部位的武器,然后调用切换武器判断事件。
在这里插入图片描述
切换武器判断事件是根据切换到目标使用的武器类型,然后再根据当前角色当前的情况去调用拿枪还是将枪收起来。
在这里插入图片描述
拿枪收枪动画其实是修改了一下之前直接调用,改成了两个事件,还增加了一个只偏移镜头的事件(这个事件是为了实现从地上捡起枪来以后,直接拿到手里,不需要播放从背后掏枪的动画),里面另一方面是为了设置动画蓝图的相关变量,Equip Weapon变量就是为了能够让动画蓝图去播放切枪的动画,所以直接0.1秒就关闭了,防止一直开启,
在这里插入图片描述
能够播放切枪动画,就是基于Equip Weapon变量控制的,前面的isWeapon变量是定义角色手上有没有枪,手上有枪那要播放持枪的动画。
在这里插入图片描述
然后就到了动画蓝图的切枪动画,然后触发动画通知,手伸到背后的时候触发通知
在这里插入图片描述
在动画通知里面,可以获取角色蓝图对象,然后去调用角色蓝图身上的修改武器位置的动画。
在这里插入图片描述
修改武器位置事件,主要是为了实现将武器放到它当前情况下应该在的位置。我们现在有当前角色的持有武器的状态,还有一个目标状态。根据这两个状态去判断修改
在这里插入图片描述
这样看着比较多,走一遍逻辑,就理解了。
这里主要是处理角色是否需要从后背拿枪,两个状态相同,只需要执行将枪收回即可
在这里插入图片描述

往真的分支走,真的分支就是,先判断了一下当前状态是否为null,即相等,又为null,什么时候都不做
在这里插入图片描述
后面就是根据当前角色手上持有的武器的状态,将枪放回背上应该放的部位,并将状态设置为了null
在这里插入图片描述
拿枪之前,又做了状态修改,就是把目标状态设置给了当前状态,并将目标状态设置为了null,并对当前状态进行判断,是否需要手上持有武器
在这里插入图片描述
最后就是根据状态,将那一把武器拿到手上,拿到手上了,并给Current Weapon赋值,主要是方便后面射击时,不用每次需要调用函数去获取当前角色手里拿着的武器类型。
在这里插入图片描述
经过这么处理,就实现了多个武器的切换,并且还能后续扩展,重要的是,在切换武器的时候,一个动画里面,可以直接拿另外的一把武器。

拾取武器直接装备到手上

接下来,我又实现了拾取武器直接装备到手上,所以需要在创建武器实例那里增加逻辑,在生成武器这里,我重新封装了一下武器生成函数。角色只能手里拿两把武器。
在这里插入图片描述
在生成武器事件里面,还是先实例化类
在这里插入图片描述
实例化完成以后,增加了判断当前角色是否持有武器,持有武器的话,那就将武器放到背上。手上没武器,直接往手上放。
在这里插入图片描述
往手上放的逻辑,因为前面封装了修改武器位置的函数,所以,我们设置了目标持有武器状态,并调用了动画通知调用的修改武器位置函数,设置镜头偏移。
在这里插入图片描述
直接看有点不理解,按第一次拾取武器并放到手上,走一遍修改武器位置的逻辑。

第一块,Weapon State 和 Weapon State Cache肯定不相等的,但是Weapon State肯定为null,所以不会走收枪的分支了。
在这里插入图片描述
第二块就是赋值和判断,就是将目标状态设置给Weapon State,分支判断也能通过了
在这里插入图片描述
最后,就是就是将武器放到了手上,并设置了当前持有武器。
在这里插入图片描述
最后就是持枪镜头偏移,在这里我修改了动画蓝图的状态,并偏移了镜头
在这里插入图片描述
结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySql】数据库的增删改查

本篇的主要目的:对于数据库如何去增加删除查询修改 文章目录 创建数据库create查看数据库show删除数据库drop修改数据库alter 创建数据库create 主要细节在于选项问题,编码选项 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, cre…

让chatGPT使用Tensor flow Keras组装Bert,GPT,Transformer

让chatGPT使用Tensor flow Keras组装Bert,GPT,Transformer implement Transformer Model by Tensor flow Kerasimplement Bert model by Tensor flow Kerasimplement GPT model by Tensor flow Keras 本文主要展示Transfomer, Bert, GPT的神经网络结构之间的关系和差异。网络上…

空间权重矩阵总结

前言 建立空间计量模型的前提,一般要引入空间权重矩阵 W W W来表达 n n n个位置的空间区域邻近关系。 但空间权重矩阵的构造一直是备受争议的,理论是不存在最优的空间矩阵,那么在实证分析中,通常用一个词总结试一试。下文总结了目…

chatgpt赋能python:Python怎么全加井号

Python怎么全加井号 在SEO优化中,适当的标记和排版对文章排名起到重要作用。在这篇文章中,我们将介绍如何使用井号(#)在Python中全加井号,以帮助优化文章搜索引擎排名。 什么是井号? 在Python中&#xf…

chatgpt赋能python:Python怎么再添一格的SEO

Python怎么再添一格的SEO Python作为一门高效、多用途、自由、易于学习的编程语言,已经被广泛地应用在各个领域,包括Web开发、数据分析、机器学习、人工智能等。在这篇文章中,我们将探讨如何使用Python来提高网站的SEO排名。 1. 了解SEO 在…

chatgpt赋能python:Python怎么写表格:介绍与结论

Python怎么写表格:介绍与结论 在数据分析或者开发领域,表格是非常常见的数据展示形式。Python作为一门流行的编程语言,在表格的处理上也有很好的支持。今天我们来介绍一下Python怎么写表格。 1. Pandas库的使用 Pandas是Python中非常流行的…

chatgpt赋能python:Python怎么入侵手机

Python怎么入侵手机 现在移动设备已经成为人们生活中必不可少的一部分,因此,攻击者越来越多地将目光转向移动设备。 进入移动设备的主要方式之一是通过应用程序漏洞进行攻击。而Python编程语言的出现可以让攻击者更容易地发掘和利用这些漏洞&#xff0c…

chatgpt赋能python:Python创建SEO文章的指南

#Python创建SEO文章的指南 在当今数字化世界中,SEO(搜索引擎优化)对于拥有一个成功的在线业务至关重要。SEO文章不仅可以帮助提高网站的排名,还可以吸引更多的访问者并提高转化率。在本文中,我们将介绍如何使用Python…

基于统计检验的空间计量经济模型选择方法

前言 当前空间计量模型的实证研究中,国内的文献均是基于LM检验的空间自相关和空间误差模型进行选择与分析,但是LM检验确实存在局限性。故此,需要对空间计量模型选择进行一个阐述。下列出现在空间计量模型选择方法。 原理方法基于统计检验方…

chatgpt赋能python:Python怎么做选择题?

Python怎么做选择题? 作为一种最广泛使用的编程语言之一,Python被广泛应用于数据科学、机器学习、人工智能、Web开发等领域,而我们今天要聚焦的是Python如何实现选择题的功能。 选择题是什么? 选择题是一种常见的考试题型&…

ICMP协议详解

目录 1.ICMP协议简介 2.ICMP报文格式 2.1 ICMP报文以太网数据帧格式 2.2 ICMP首部格式 2.3 ICMP报文类型列表 3.ICMP故障排查工具 3.1 ping工具 3.2 traceroute工具 4.常见ICMP报文 4.1 ICMP请求和应答 4.2 ICMP差错报告报文 4.3 目标主机不可达 5.ICMP校验和计算 …

ROS学习——通信机制(话题通信④—自定义msg)

052话题通信_自定义msg_实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili 2.1.4 话题通信自定义msg Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 一、自定义msg实现 需求:创建自定义消息,该消息包含人的信息:姓名、身高、年龄等。 1.定义msg文件 &am…

python基础语法学习--字面量

1、字面量的定义 在代码中,被写下来的固定的值。 2、常见值类型 数字:Number,包含整数int、浮点数float、复数complex、布尔bool四类。 整数int:如10、-10等 浮点数float:如13.14、-13.14等 复数complex:如…

Cracking C++(6): 准确打印浮点数

文章目录 1. 目的2. 准确打印浮点数: 使用 fmt 库3. 准确算出被表示的值3.1 直观感受IEEE-754: float-toy3.2 获取浮点数二进制表示3.3 float 类型3.4 double 类型3.5 fp16 类型3.6 验证 4. 结论和讨论5. References 1. 目的 给 float 或 double 类型的变量赋值后&…

chatgpt赋能python:Python教程:如何倒序输出字典?

Python教程:如何倒序输出字典? Python是一种强大的编程语言,广泛用于各种类型的应用程序开发。在开发应用程序时,访问和操作数据是至关重要的一步,而字典是Python中最有用的数据结构之一。字典允许开发人员使用键值对…

Linux安装myql8.0操作步骤

1. 创建software目录,目录可以自定义 mkdir /usr/local/softwar 2. 进入目录software,获取安装包文件 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz 3. 解压文件 tar -vxf mysql-8.0.32-…

【MySQL数据库 | 第十六篇】存储引擎

目录 前言: MySQL体系结构图: 存储引擎简介: 1. InnoDB存储引擎: 2. MyISAM存储引擎: 3. MEMORY存储引擎: 4. NDB Cluster存储引擎: 5. ARCHIVE存储引擎: 存储引擎语法&#…

chatgpt赋能python:Python再次运行快捷键介绍及使用技巧

Python再次运行快捷键介绍及使用技巧 如果你是一名经验丰富的Python工程师,你一定知道如何使用Python快捷键加速代码调试和开发。然而,在实际开发中有许多情况下,你需要再次运行刚刚输入的代码块或函数,这个时候,你必…

JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方

问题 JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方 详细问题 笔者基于开发JavaWeb开发聊天功能,当用户处于聊天室中,若用户发送一条信息或用户接收到聊天对象的信息,若要查看信息,需要下滑…

Storm超实用教程详解-附示例

一、理论基础 Storm 是一个免费并开源的分布式实时计算系统。利用 Storm 可以很容易做到可靠地处理无限的 数据流,像 Hadoop 批量处理大数据一样,Storm 可以实时处理数据。在Storm中,topology的构建是一个有向无环图。结点就是Spout或者Bolt&…