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

news2024/11/24 20:46:19

快捷键

快捷键 ctrl+E 可以快速打开相关蓝图类,直接在场景选中添加到场景中的对象即可。

调试蓝图

在这里插入图片描述
选中调试对象,选中需要调试的实例,即可查看当前角色的状态。
在这里插入图片描述
动画实例在运行的时候,也可以在右侧箭头获取当前场景已经生成的实例,查看当前角色动画的运行状态。

设置默认进入场景

在这里插入图片描述
项目设置中,选择地图和模式,有编辑器开始地图和打包游戏后默认进入地图。

资源管理

可以在内容根目录分场景,角色素材,粒子特效,蓝图,武器,音效,ui等文件夹,用于存放相应的资源。

输入映射

输入映射就是自定义硬件的输入,可以自定义每个输入设备的输入内容(手柄,键盘,方向盘,vr等)。
映射主要使用两种:操作映射和轴映射
操作映射 会通过相应按键触发,在蓝图中可以获取按下抬起等相关事件。按下只能触发一次,抬起再按下才能再次触发。
轴映射 会通过长按持续触发,引擎会持续监听。
在这里插入图片描述
轴映射可以设置角色移动以及鼠标移动相机方向
在这里插入图片描述
如果不方便查找相应键位,可以点击左侧的图标,然后按键盘上相应的键位即可。

创建相机控制蓝图

在这里插入图片描述
在文件夹内右键,选择蓝图类
在这里插入图片描述
然后选择角色蓝图类,这是ue内置的基础类,角色蓝图是一个创建角色基础的蓝图,里面内置了一些节点可以让创作者轻松创建出一个可以在场景中移动的角色,我们可以基于此基础进行扩展。
在这里插入图片描述
蓝图内容分为两大部分,一部分是节点common,可以在内部添加碰撞体,模型等。另一部分就是相关组件脚本,相当于unity挂载的运行脚本,可以给蓝图增加一个主要的功能。
我们可以在组件的左上角发现添加按钮,通过选择添加常见的组件,或者自定义脚本组件。

当前蓝图内置的组件:胶囊体组件碰撞检测使用,箭头组件用来表示正方向,网格体组件为角色模型,角色移动脚本组件为当前蓝图的一些角色属性以及设置。

添加相机

角色蓝图默认不含有相机,制作第三人称蓝图,会有相机默认跟随人物移动,所以,我们需要在蓝图内添加一个跟随的相机。
在这里插入图片描述
选择添加,首先在蓝图上添加一个弹簧臂组件,然后在弹簧臂组件下面添加一个摄像机组件。
在这里插入图片描述

创建图表

图表相当于一个个的逻辑代码文件,我们可以在图表内配置运行逻辑,事件触发逻辑等等。
在这里插入图片描述
在我的蓝图,添加,图表,创建一个新的图标,用于一些输入控制角色操作。
在这里插入图片描述
在蓝图区域,鼠标右键搜索,你会发现有两个名字的操作,一个是坐标轴事件,这个是用于触发事件,另一个是坐标轴值
在这里插入图片描述
这两个是有区别,一个是事件触发并且可以获取值,另一个只能够获取到值。
在这里插入图片描述
在这里插入图片描述

上图为鼠标控制相机朝向节点链接。
但是输入是设置的控制器,控制器不代表能够控制弹簧臂的移动,所以,我们还需要一个额外的设置才可以让控制器的控制去修改弹簧臂。
在这里插入图片描述
将使用Pawn控制旋转勾选,即可实现其内部的事件传递。如果我们不选择这个属性,那就需要自己去手动控制
在这里插入图片描述

这里个人理解,你自己也可以写事件去实现弹簧臂的旋转,但是有默认的方法实现,没有特殊要求,就没必要频繁造轮子了。
在这里插入图片描述
还有,我们这是鼠标的时候,后面有个缩放系数,如果游戏中需要调节鼠标灵敏度,可以直接将这个系数调大或者调小,实现鼠标旋转灵敏度的调节。
运行起来我们会发现角色也会跟着相机进行水平旋转,这个原因是类的默认值默认使用控制器旋转它的yaw,我们只需要将这个取消勾选即可。
在这里插入图片描述

修改弹簧臂

为了防止相机在角色的头后面,我们需要修改相机的位置,让相机朝着的位置总是靠右一些。这里我们通过修改弹簧臂实现。
首先将弹簧臂位置调到头部位置,让相机围绕着头部旋转,所以我们需要调整弹簧臂的位置到角色头部,然后再设置弹簧臂偏移。在这里插入图片描述
在这里插入图片描述
弹簧臂的偏移可以在蓝图中修改,比如默认状态下偏移多少,持枪状态下偏移多少。

接下来,我们还要实现鼠标可以控制弹簧臂的远近,上图可以看到,我们只需要找到对象上面的目标臂长度,设置即可。在这里插入图片描述
上面使用了三个新的节点,首先将弹簧臂节点拖拽到蓝图中,通过蓝图获取到目标臂长度,还有设置目标臂长度节点,以及先机范围节点,通过滚轮实现设置事件触发。

控制角色移动

要控制角色移动,首先要获取到当前的控制器的旋转朝向,基于相机的方向的前后左右进行前后左右旋转。
在这里插入图片描述
我们需要通过控制器的Yaw,也就是水平的方向,而不是控制器的多个方向,所以,我们需要通过它的Yaw进行创建一个新的朝向,这个方向也是归一化以后的,然后通过这个旋转体获取到向前的方向和向右的方向。然后通过这个方向根据按键触发再通过内置的方法设置移动方向。
在这里插入图片描述
这个方向就是角色的移动方向。然后根据设置的按键操作缩放数值,来实现移动。

接下来,我们发现角色移动朝向不是朝向移动的方向,我们需要在CharacterMovement内找到将旋转朝向运动,即可实现角色朝向运动的方向。
在这里插入图片描述
设置完成后,发现角色将会在移动时,朝向自动旋转。
到这里,我们学会了两种方式去控制角色朝向,第一种是使用控制器,在类的默认值设置,第二种就是使用运动方向控制。如果两个都开启,那么,两种都会实现控制,容易错乱。

动画蓝图

控制骨骼网格体动画的专用蓝图,简单来说就是专门用于多个动画之间的混合计算的蓝图。(注意事项:一定要选择对应的角色模型骨骼)。
选择当前角色模型使用的骨骼网格体
在这里插入图片描述
然后打开骨骼网格体,在左上角找到浏览,即可在资源列表中找到对应的文件
在这里插入图片描述
创建动画蓝图,首先右键列表找到动画蓝图类
在这里插入图片描述
骨骼选择当前角色的骨骼网格体,父类选择AnimInstance父类,创建一个纯净的动画蓝图。
在这里插入图片描述
在这里插入图片描述
打开以后样子是这样的
在这里插入图片描述
可以通过上面的预览网格体修改预览使用的网格体
在这里插入图片描述
在这里插入图片描述
事件图标用来设置动画切换逻辑,AnimGraph用来切换动画使用。
在这里插入图片描述
如果不小心关掉了,可以在左侧双击重新打开。

状态机

状态机中包含许多不同的动画状态,不同的状态直接可以进行混合、过渡、切换,可以有我们自己定义规则。
状态机只存在于动画图标AnimGrph。
在这里插入图片描述
右键输入状态机,第一个就是可以添加新状态机。

混合空间

混合空间能够让动画混合,比如走和跑,我们可以通过当前角色的移动速度,让角色自动混合从走到跑的过程,不会产生僵硬的切换。
创建混合空间也需要对应的骨骼网格体。
在这里插入图片描述
在资源列表鼠标右键选择动画,下面混合空间1D(单个数值控制的动画混合),可以创建一个最简单的混合空间。
接下来创建一个移动的混合空间
在这里插入图片描述
打开水平坐标,设置名称,然后设置最小轴值0,最大轴值为角色移动时达到最大速度后的移动值。网格划分可以设置被最大速度整除的值,这样方便放置动画放到一个整数上面。
在这里插入图片描述
想预览动画,可以全选动画,然后设置当前预览网格体,就可以查看当前动画。
在这里插入图片描述
可以将播放的动画拖拽到下面列表中,选中节点也可以在上面设置具体数值。
长按ctrl键设置预览点(绿色)
在这里插入图片描述
取样平滑这里可以设置,值越小,混合的速度就越慢,一般都设置为3左右即可。
在这里插入图片描述
在动画蓝图的动画图标中创建一个动画机,然后双击动画机进入
在这里插入图片描述
将刚才创建好的混合空间拖拽上来,将Entry链接到此处。保存,即可发现右侧预览动画为默认idle状态。
这样无法切换当前的速度,所以,我们需要创建一个新的状态。
在这里插入图片描述
右键点击添加状态,即可创建一个新的状态,然后双击进入。
在这里插入图片描述
这样,我们就可以通过设置数值,实现数值实现动画切换。
在这里插入图片描述
如何修改这个值呢,首先我们将其提升为变量。
在这里插入图片描述
提升完成后,左侧变量会显示当前值,值的前面也会出现一个引脚,用于传递变量的值。
在这里插入图片描述
我们要在事件图表里面首先判断当前这个蓝图是否有使用者,使用Is Valid节点进行判断,如果有,则从Pawn拥有者身上获取到速度,但是获取的速度是一个三维向量(黄色的按钮),所以,我们还需要获取向量的长度,然后设置即可。
在这里插入图片描述
接下来,在角色蓝图里面,选中网格体,在右侧动画类里设置当前创建的动画蓝图,即可实现当前角色的移动动画。

实现角色走路跑步和冲刺

在这里插入图片描述
右键蓝图,创建一个枚举。
在这里插入图片描述
在这里插入图片描述
点击上面的添加枚举器,增加三个枚举,用于记录当前的状态。个人推荐枚举的命名前缀加上Enum。
在这里插入图片描述
在蓝图类中创建一个变量,用于记录移动状态
在这里插入图片描述
在右侧修改变量类型,搜索枚举名称,设置当前变量类型。
在这里插入图片描述
设置变量默认值为Run,需要先编译。

接下来要实现当前变量的判断,然后根据变量的值进行角色的速度修改,这里通过创建一个通用的函数,来实现复用。
在这里插入图片描述
首先点击加号,创建一个函数
在这里插入图片描述
在函数内,对枚举进行判断,可以使用switch节点,然后创建一个Speed变量,将变量类型修改为浮点数。switch节点可以根据不同的状态去设置不同的变量的值,接着添加一个返回节点,并将最后的值返回出去,这样就书写完成了一个函数。
在这里插入图片描述
接下来要去调用这个函数,为了快速实现,现在使用一种比较耗费性能的方法,每一帧去判断。
在这里插入图片描述
然后将左侧的角色移动拖拽下来,找到设置最大速度 设置 Max Walk Speed,来实现速度的设置。
在这里插入图片描述
最终链接如上。
接着我们要实现状态枚举的变量的修改,那就简单了,之前我们已经写好了ctrl和shift键的触发。
在这里插入图片描述
使用这两个键实现状态修改。
在这里插入图片描述
当前键位按下时,修改成目标移动状态,抬起时修改成默认状态,即可实现移动状态的切换。

实现跳跃

首先在输入列表添加跳跃按键,然后链接跳跃事件。
在这里插入图片描述
这样就实现了跳跃,只是没有动画。

创建一个设置跳跃的动画和高度的函数。
在这里插入图片描述
首先是高度的设置,我们要去修改角色移动的跳跃的Z速度。
在这里插入图片描述
在函数内这样设置。
在这里插入图片描述
根据不同的移动速度,设置不同的跳跃高度。
在这里插入图片描述
接下来我们使用蒙太奇播放去播放不同的跳跃动画。
在这里插入图片描述
为了方便修改蒙太奇播放资产,我们把资产节点提升为变量,方便修改。
在这里插入图片描述
为了方便每个角色修改,将蒙太奇使用的资产提升,可以在函数外设置,相当于增加了函数值。
在这里插入图片描述
播放为了防止角色位置发生偏移,我们需要启用根节点运动,保证角色在设置的位置播放动画。如果本身就是根节点运动的,就不要再设置了,我发现我强制启用了根运动,角色会原地跳跃。
在这里插入图片描述
在动画的文件右键,创建蒙太奇动画。
在这里插入图片描述
接下来,我们要创建插槽,插槽可以让我们知道创建的是什么蒙太奇动画。
在这里插入图片描述
右侧会出现动画插槽列表。
在这里插入图片描述
点击添加插槽,创建一个jump的插槽
在这里插入图片描述
设置完成之后,选择刚才设置好的插槽。
在这里插入图片描述
在之前设置的地方直接改为调用函数
在这里插入图片描述
将跳跃触发修改到蒙太奇播放的后面。
在这里插入图片描述
创建了插槽,还需要使用,现在直接测试
在这里插入图片描述
创建完成插槽,记得在右侧将插槽修改为Jump插槽。
插槽就是为了,在播放蒙太奇的动画时,我们可以选择在何时进行混合。
在这里插入图片描述
为了防止角色能够一直跳跃,我们使用一个变量判断,然后再跳跃完成落地后,让角色可以再次跳跃。
在这里插入图片描述
在跳跃后,将变量设置为false,分支节点可以通过if去得到
在这里插入图片描述
然后函数调用完成,延迟一秒再将变量设置为true,即可以再次跳跃。
在这里插入图片描述
实现多段跳,可以在类默认值里面找到跳跃最大数量去设置。

坠落动画实现

在这里插入图片描述

在基础状态机里面,移动右侧新加一个状态,坠落取名Fall,再从Fall节点拉出一个箭头返回Walk,形成闭环。
在这里插入图片描述
在左侧创建一个变量用于判断当前是否在空中。
在这里插入图片描述
然后再动画图表里面从拥有者身上获取移动组件,从里面获取是否正在掉落。
在这里插入图片描述
将值设置给变量,有了变量,我们可以在状态机切换里面去设置状态切换。
在这里插入图片描述
双击切换,即可进入
在这里插入图片描述
将变量设置给结果,如果值为True,则可以从移动切换到掉落动画。
在这里插入图片描述
我们还需要设置切换回去的,就是另外一个切换箭头,进入将变量取反,如果不在空间,那么,结果将为true。
在这里插入图片描述
然后进入Fall状态,在右面找到坠落动画,输出动画姿势,即可实现掉落效果。
在这里插入图片描述
如果感觉过渡动画的时长有点卡顿,可以手动调节两个状态动画过渡的时长。
在这里插入图片描述
注意这两个,and是并集,not是交集,右键输入 and 布尔 能找到AND节点,右键输入not 布尔 能找到NOT节点

角色蓝图和动画蓝图之间数据传递

在角色蓝图中获取动画实例
在这里插入图片描述
动画实例是在角色网格体上的,我们可以通过橘色网格体获取动画实例,然后在时间开始运行时,判断类型是否正确,将类型转换为目标动画类型,并将获得的结果提升为变量,这样可以在角色蓝图中的事件图表中的任何位置使用当前蓝图设置角色中的相关属性。
在这里插入图片描述
前面切换跳跃其实我们使用的是蒙太奇实现的,但我看库里面的角色制作是通过状态机切换,这里说一下思路,从行走跳跃后,就进入的浮空状态,就先播放了一下跳跃动画,动画不循环,完成后,直接切换到浮空,如果不是悬浮状态了,直接切换到移动状态。

移动地面摩擦力

在这里插入图片描述
在这里插入图片描述
通过这两个值,我们可以模拟不同的地面的质感。

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

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

相关文章

Linux socket编程(二):多进程服务器

一、多进程服务器 最简单的的服务器程序执行流程为:创建socket → \rightarrow → 绑定监听的IP地址和端口 → \rightarrow → 监听客户端连接 → \rightarrow → 接受/发送数据。当服务端调用read阻塞等待一个客户端发来数据时,无法同时响应其它客户…

七、CANdelaStudio入门-Variant概念与应用

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的Variant概念与应用,欢迎各位朋友订阅、…

Redis实现互相关注功能

Redis实现互相关注功能 我们要实现关注功能,首先,我们需要得到关注的目标ID: PutMapping("/{id}/{isFollow}")public Result followUser(PathVariable("id") Long id,PathVariable("isFollow") Boolean isFol…

下一代大数据分布式存储技术Apache Ozone初步研究

文章目录 概述定义特性架构总体架构写数据读数据 部署安装方式安装Docker启动Docker-compose启动企业预置型(On Premise)安装 实践命令行接口Ofs (Hadoop兼容)Recon API 概述 定义 Apache Ozone 官网地址 https://ozone.apache.org/ 最新版本1.3.0 Apache Ozone 官网最新文档地…

Java线程间通信方式(2)

前文了解了线程通信方式中的Object.wait/Object.notify以及Semaphore,接下来我们继续了解其他的线程间通信方式。 CountDownLatch CountDownLatch利用一个指定的计数初始化,由于调用了countDown方法,await方法会阻塞直到当前技术为0,之后所…

PHP-8.2.5+IIS10 php-cgi.exe - FastCGI 进程意外退出

服务器信息: Windows Server 2019 Standard. Internet Information Services(Version 10.0.17763.1) PHP版本: PHP Version 8.2.5 php-8.2.5-nts-Win32-vs16-x64 下载地址:https://windows.php.net/download#php-8.2 错误信息: H…

【网络】-- UDP协议

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 netstat pidof UDP协议 UDP的特点 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 负责数据能够从发送端传输接收端。 再谈端口号 端…

【ROS】ubuntu18.04安装ROS(ROS1 Melodic)

1、添加中科大ROS源 1.1、添加源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main" > /etc/apt/sources.list.d/ros-latest.list1. 2、添加公钥 sudo apt-key adv --keyserver hkp://keyser…

输入捕获实验

实验内容 用TIM5 的通道 1(PA0)来做输入捕获,捕获 PA0 上高电平的脉宽(用 WK_UP 按键输入高电平),通过串口打印高电平脉宽时间。 输入捕获简介 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的…

新库上线 | 全国工艺美术大师信息数据

全国工艺美术大师信息数据 一、数据简介 作为物质产品,工艺美术反映着一定时代、一定社会的物质的和文化的生产水平;作为精神产品,它的视觉形象(造型、色彩、装饰)又体现了一定时代的审美观。我国工艺美术品的制作较早…

java基础+注解笔记【狂神说java】

基础部分–总结 基础包的命名 //一般为域名倒置 page com.yang.base基础语法 类和方法 根据不同的写法–大小写的差异可以判别是类对象还是方法名 类的首字母都要大写,方法首字母小写可以理解为,类对象是class,方法是函数 类对象 方法 使…

浅谈在 Vue2 和 Vue3 中计算属性和侦听器的一些变化

文章目录 📋前言🎯计算属性🎯侦听器📝最后 📋前言 计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。因此无论是在哪个版本,它们都是不可缺少的概念,这篇文…

音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。

01-SDL子系统 SDL将功能分成下列数个子系统(subsystem): ◼ SDL_INIT_TIMER:定时器 ◼ SDL_INIT_AUDIO:音频 ◼ SDL_INIT_VIDEO:视频 ◼ SDL_INIT_JOYSTICK:摇杆 ◼ SDL_INIT_HAPTIC&#xff1…

第十三章 享元模式

文章目录 前言一、享元模式基本介绍二、享元模式解决网站展现项目完整代码WebSite 抽象网站类User 外部状态用户内部状态网站 ConcreteWebSite网站工厂产生网站和负责共享(池) WebSiteFactoryClint 测试 三、享元模式在JDK-Interger的应用源码分析四、享…

ERBuilder Data Modeler Crack

ERBuilder Data Modeler Crack 为过程、视图和触发器添加了人工智能驱动的描述生成。 添加了一种新的自动排列方法,可以轻松地排列和组织表格,从而简化ER图的可视化显示。 添加了使用两种身份验证方法创建到远程服务器的SSH连接的功能:密码身…

Linux - 第10节 - Linux多线程(二)

1.Linux线程同步 1.1.同步概念与竞态条件 线程互斥的设计是正确的,但线程互斥在某些场景下并不合理,有可能导致饥饿问题。 饥饿问题:某个执行流访问完临界资源后释放锁,此时相较于其他执行流,该执行流离锁更近&#x…

【目标检测论文阅读笔记】Detection of plane in remote sensing images using super-resolution

Abstract 由于大量的小目标、实例级噪声和云遮挡等因素,遥感图像的目标检测精度低,漏检率或误检率高。本文提出了一种新的基于SRGAN和YOLOV3的目标检测模型,称为SR-YOLO。解决了SRGAN网络 对超参数的敏感性和模态崩溃问题。同时,Y…

【中级软件设计师】—(针对上午题)算法分析与设计(三十八)

【中级软件设计师】—(针对上午题)算法分析与设计(三十八) 一、回溯法 1. 什么是回溯法? 相信"迷宫"是许多人儿时的回忆,大家小时候一定都玩过迷宫游戏。我们从不用别人教,都知道走…

TryHackMe-M4tr1x: Exit Denied(boot2root)

M4tr1x: Exit Denied 大多数人只看到一个完美构建的系统。但你一直都是不同的。你不仅看到表面上的东西,还看到 它下面有什么统治;调节和调节的内部关联机制 几乎完美地管理其每个模块,以至于它试图隐藏所有模块 其多面设计中的微小孔。但是&#xff0c…

【数据结构】链表详解

本片要分享的内容是链表,为方便阅读以下为本片目录 目录 1.顺序表的问题及思考 1.链表的遍历 2.头部插入 2.1开辟空间函数分装 3.尾部插入 纠正 4.尾部删除 5.头部删除 6.数据查找 7.任意位置插入 1.顺序表的问题及思考 上一篇中讲解了顺序表中增删查…