恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

UE5FPS游戏开发教程(二)

  • 首页
  • 资讯中心
  • /
  • UE5FPS游戏开发教程(二)

相关资讯

Java游戏服务器如何集成Apollo配置中心实现动态配置管理 2026/8/10 9:36:01
Python装饰器:从基础到高级应用全解析 2026/8/10 9:31:00
AI Agent技能调用失效?SDD架构下技能执行遗漏的排查与优化 2026/8/10 9:31:00

最新资讯

终极Mermaid实时编辑器:3分钟创建专业图表的免费在线神器
深入探讨辽阳网站建设58的行业现状与未来趋势,揭秘辽阳网站优化58的核心竞争力及辽阳建站公司58的服务流程解析
原神自动化神器:BetterGenshinImpact完全指南,告别重复劳动轻松游戏
c语言链表与结构体
MySQL基础入门:从安装到实战操作
现代项目管理工具如何提升软件团队协作效率

今日推荐

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南
告别语言障碍:KISS Translator 双语翻译插件终极指南
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

UE5FPS游戏开发教程(二)

发布时间:2026/8/10 9:36:01
UE5FPS游戏开发教程(二) 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言一、模块化设计二、瞄准系统1.完善瞄准系统(上)2.完善瞄准系统(下)3.完善灵敏度系统前言一、模块化设计下面我们来将枪从角色蓝图中分离出来即给枪创建一个单独的蓝图这样来进行模块化设计。下面是进行模块化设计的一些优点。我们先在Code目录下创建一个Weapon文件夹该文件夹用来存储武器相关的内容然后我们在Weapon目录下创建一个Base文件夹然后在该文件夹下面存储武器基础内容相关的数据。我们在Base文件夹下面创建一个Actor蓝图用来作为武器类的基类BP_WeaponBase。因为后续我们添加其它武器例如AK47、M4A1等时这些武器会有一些共同的属性例如武器子弹数量、伤害、后坐力等这些属性我们就可以直接添加在武器基类BP_WeaponBase中。然后后续添加其它武器时直接将新武器蓝图继承武器基类BP_WeaponBase然后新武器蓝图就继承了武器基类BP_WeaponBase的子弹数量、伤害、后坐力等属性直接在新武器蓝图中设置新武器的子弹数量、伤害、后坐力等属性即可就不用再重新给新武器蓝图中添加这些属性了。然后我们双击打开BP_WeaponBase蓝图添加一个骨骼网格体组件然后拖拽骨骼网格体组件让它覆盖默认的根组件。然后我们添加一个整数类型变量Ammo。然后我们在Weapon文件下面创建一个蓝图类创建该蓝图类时选择上面创建的武器基类BP_WeaponBase为它的父类然后命名蓝图类为BP_VIRTUSBP_VIRTUS就是维克多这个武器的蓝图类我们在BP_VIRTUS蓝图类中进行武器的相关设置。双击打开BP_VIRTUS蓝图然后点击类默认值就可以看到BP_WeaponBase蓝图中添加的Ammo这个变量了我们可以在BP_VIRTUS蓝图中设置Ammo变量的值。还可以看到BP_VIRTUS蓝图中也继承了BP_WeaponBase蓝图中的骨骼网格体组件Weapon我们选中Weapon然后设置它的骨骼网格体资产为维克多枪模型。然后我们在Weapon骨骼网格体下创建四个静态网格体分别为Barrel(枪管)、Magazine(弹夹)、Scope(倍镜)、Stock(枪托)然后分别设置这四个静态网格体组件的静态网格体模型和父项套接字。然后我们在BP_FPSPlayer角色蓝图中删除掉维克多武器相关的组件。然后我们在BP_FPSPlayer角色蓝图中新创建一个函数SpawnWeapon然后添加一个从类生成Actor节点类类型我们选择BP_VIRTUS通过这个节点就能动态创建一个BP_VIRTUS蓝图对象。然后再添加一个将Actor附加到组件节点然后目标就是我们动态创建的BP_VIRTUS对象Parent引脚就是Arm组件。这样的话我们就通过蓝图动态创建了一个BP_VIRTUS对象并且让BP_VIRTUS对象附加到Arm组件上就和前面的Gun组件附件到Arm组件上类似。然后我们此时运行项目会报Spawn Transform没有赋值的错误我们直接将这个引脚分隔开即可然后可以看到Spawn Transform Location/Rotation/Scale就都有默认值了这个Spawn Transform Location/Rotation/Scale就和前面我们选中Gun组件在右侧属性面板设置它的位置、旋转和缩放类似。然后我们在Event BeginPlay事件后调用SpawnWeapon函数即武器对象只需要在开始时创建一个即可。此时运行项目发现枪模型把摄像机遮挡了此时我们可以在BP_VIRTUS蓝图中选中Weapon组件设置它的动画模式为使用动画蓝图然后设置动画类为我们前面制作的ABP_VIRTUS动画蓝图。然后运行项目发现摄像机没有被遮挡了但是枪的动画有问题然后就是现在按W、S按键都向后走这是因为卡碰撞了。即我们的角色模型是有碰撞的枪模型也是有碰撞的当将枪对象动态创建出来之后枪模型和角色模型就产生碰撞了然后就出现上面的一些Bug了。我们在BP_VIRTUS蓝图中将Weapon、Barrel、Magazine、Scope、Stock这五个组件的碰撞都设置为无碰撞。然后再运行时角色移动就没有问题了但是枪模型还是没有动画。枪的动画没有出现这是因为当前枪的动画失效了。我们可以看在ABP_VIRTUS动画蓝图中我们将尝试获取Pawn拥有者转为了BP_FPSPlayer角色蓝图对象了但是当前ABP_VIRTUS动画蓝图是被BP_VIRTUS武器蓝图对象拥有的即我们将BP_VIRTUS的动画类设置为ABP_VIRTUS了所以动画失效了。并且ABP_VIRTUS动画蓝图中的一些角色状态变量例如MoveX、MoveY等都是通过BP_FPSPlayer角色蓝图对象获得的。所以我们现在就需要把角色蓝图对象加载到枪蓝图对象中。我们在BP_FPSPlayer蓝图中的SpawnWeapon函数中可以看到生成Actor BP_VIRTUS节点中有一个Owner引脚这个引脚就是设置当前BP_VIRTUS对象的拥有者是谁我们设置为Self此时在BP_FPSPlay蓝图中所以Self节点就表示BP_FPSPlayer对象自己这样的话我们就设置了BP_VIRTUS对象的拥有者就是BP_FPSPlayer对象。然后我们在ABP_VIRTUS蓝图中通过获取拥有者Actor节点得到ABP_VIRTUS蓝图的拥有者此时ABP_VIRTUS蓝图的拥有者是BP_VIRTUS蓝图然后我们将ABP_VIRTUS蓝图的拥有者类型转换为BP_VIRTUS对象。然后我们通过获取拥有者节点得到BP_VIRTUS对象的拥有者因为BP_VIRTUS对象的拥有者是BP_FPSPlayer对象所以我们将BP_VIRTUS对象的拥有者类型转换为BP_FPSPlayer。然后我们创建一个事件蓝图初始化动画节点这个节点只有在ABP_VIRTUS动画蓝图对象创建时调用一次。这样的话我们就在ABP_VIRTUS动画蓝图中又拿到了BP_FPSPlayer对象。此时我们直接将BP_FPSPlayer对象和前面一样连接就可以正常播放枪的动画了。但是这一次我们不这样做了因为我们前面测试也可以发现当我们快速频繁瞄准和取消瞄准时或者快速频繁切换奔跑和走路时发现手臂模型和枪模型会出现不同步的情况这是因为UE5状态机在处理频繁打断时一个非常底层的机制即姿势快照污染。就是我们疯狂的快速触发和打断状态机在这种快速且复杂的切换中它没有办法保证两个同时运行的动画蓝图能够做到分毫不差。所以下面我们就来解决这个问题我们之前在枪动画蓝图中获取角色状态数据是从BP_FPSPlayer对象中获取的我们现在要从手臂的动画蓝图中获取角色状态数据就可以解决这个问题。我们先获取BP_FPSPlayer对象的Arm组件然后获取该组件的动画实例Arm组件的动画实例就是我们给Arm组件设置的动画类即ABP_FPSPlayer动画蓝图然后我们将获取动画实例节点的返回值转换为ABP_FPSPlayer动画蓝图对象。这样我们就成功在ABP_VIRTUS动画蓝图中成功获取到了ABP_FPSPlayer动画蓝图对象然后我们将ABP_FPSPlayer提升为变量以便后续使用。然后我们在ABP_VIRTUS动画蓝图中每一帧都将ABP_FPSPlayer对象的MoveX、MoveY、E_PlayerState、CharacterMovement变量的值赋给ABP_VIRTUS蓝图中的相对应变量。此时再运行项目就不会出现之前的姿势快照污染情况了。二、瞄准系统1.完善瞄准系统(上)下面我们来制作瞄准系统。当前我们运行项目时点击鼠标右键瞄准后可以看到瞄准镜的准星视线并没有和我们的视角对齐。正常的瞄准状态的话角色的头应该凑到瞄准镜后面然后角色视角就和枪瞄准镜的准星对齐了。下面我们打开枪的骨骼网格体然后在body骨骼下面创建一个插槽然后按F2重命名为AimSocket。这个插槽在这里就是起到一个记录位置的作用。然后我们设置AimSocket插槽的相对位置为(-3.5,2.3,0)这个位置就是瞄准时我们角色的头要凑到的一个位置。然后我们在BP_WeaponBase蓝图类中实现一个GetAimSocketLocation函数用来获取AimSocket插槽的位置。这里我们将GetAimSocketLocation函数写在BP_WeaponBase蓝图类中的好处后面所有继承自BP_WeaponBase的蓝图类就都继承了GetAimSocketLocation函数。然后我们添加一个获取插槽位置节点来获取AimSocket插槽的位置然后再将AimSocket插槽位置提升为变量AimSocketLocation然后再添加一个返回节点即给函数GetAimSocketLocation设置一个返回值并且将返回值命名为AimSocketLocation然后我们将AimSocket插槽的位置返回。然后我们回到BP_VIRTUS蓝图中可以看到在函数重载中就可以看到GetAimSocketLocation函数了。然后我们在BP_FPSPlayer蓝图的SpawnWeapon函数中将生成Actor BP_VIRTUS节点的返回值提升为变量Weapon。因为我们要在ABP_FPSPlayer动画蓝图中将角色的头骨骼移动到枪模型的瞄准镜前面即枪骨骼中设置AimSocket插槽的位置。所以我们需要在ABP_FPSPlayer动画蓝图中获取到BP_VIRTUS对象然后调用该对象的GetAimSocketLocation函数来获取AimSocket插槽的位置所以我们前面将BP_VIRTUS对象设置为变量保存在BP_FPSPlayer蓝图中。然后在ABP_FPSPlayer中获取到AimSocket插槽的位置后将该位置向量保存为变量以便后续使用。然后我们在ABP_FPSPlayer蓝图中创建一个新保存的缓存姿势节点将Basic状态机存储到缓存中。这样后续使用Basic这个状态机时就可以通过创建使用缓存姿势Basic节点来得到Basic状态机。然后我们再添加一个混合姿势节点这个节点和前面的按布尔混合姿势节点类似只不过这个节点通过枚举来决定要显示哪个姿势而且姿势引脚可以通过右键来自行添加。这个Aim姿势就是当Active Enum Value引脚的值为Aim时就输出Aim姿势默认姿势就是当Active Enum Value的值不为Aim为Run时此时没有Run姿势引脚然后就会输出默认姿势了。然后我们将使用缓存姿势Basic节点连接到默认姿势上这样的话当E_PlayerState不为Aim时角色的状态还是和之前一样。然后我们添加一个变换骨骼节点即当E_PlayerState为Aim状态时我们在Basic状态的基础上修改角色的Head骨骼的位置到枪骨骼的AimSocket插槽处位置这样的话当角色为瞄准状态时角色的视角就和枪的瞄准镜准星对齐了因为我们前面将摄像机也绑定到了角色的Head骨骼上所以Head骨骼位置改变时摄像机位置也随着改变然后角色视角也随着改变。我们选中变换骨骼节点然后设置它的平移模式为替换现有项设置平移空间为世界场景空间这是因为在BP_WeaponBase蓝图中通过获取插槽位置节点获取的也是AimSocket插槽在世界空间中的位置。然后我们将相关引脚都连接。然后修改默认混合时间和Aim混合时间为0.2以此来让角色瞄准时视角切换平滑一些。此时我们运行项目可以看到瞄准时角色视角就和枪瞄准镜对齐了。但是此时当我们退出运行模式时发现报错了。我们点击错误发现是Weapon为空。这是因为动画蓝图在刚开始就渲染好了但是武器蓝图等可能在第三帧、第四帧才渲染好所以会报Weapon为空的错误。此时我们可以通过Weapon节点引出一个IsValid节点即判断Weapon对象当前是否有效只有当Weapon对象有效时才执行它的GetAimSocketLocation函数这样的话错误就消失了。2.完善瞄准系统(下)下面我们先打开BP_VIRTUS蓝图然后在Weapon组件下再添加一个静态网格体组件Sight作为机瞄然后设置Sight组件的静态网格体为Sight和父项套接字为Sight。需要注意的是我们也需要将Sight组件碰撞预设设置为无碰撞。然后运行项目可以看到机瞄模型就添加到枪上了。此时我们看到当前的一个bug当快速移动时准星变成了一个长条形。上面的Bug是因为瞄准镜的材质的问题。我们打开BP_VIRTUS蓝图然后选中Scope然后打开Scope使用的材质元素2这个材质元素2就是瞄准镜上绿色点使用的材质。可以看到MI_Holographc_Inst6是一个材质实例我们进入到这个材质实例的父项。然后将材质的半透明通道改为动态模糊后然后点击左上角的应用。此时运行项目瞄准时再移动视角就没有刚才的bug了。这个bug就是因为UE5在渲染时都有动态模糊的然后它渲染这个准星时也使用了动态模糊。我们的这个设置就是告诉UE5当动态模糊结束后再渲染准星这样的话准星就没有动态模糊了。下面我们来制作瞄准时倍率放大的效果。我们在BP_FPSPlayer蓝图中的IA_Aim事件节点后面添加一个Camera的设置视野的节点这个节点就是设置摄像机的焦段的我们看到摄像机的默认焦段是90我们将它的默认值修改为105因为105焦段会变得更广更能凸显人物运动时的视觉效果。可以体会到这里的焦段和照相机镜头的焦段是不一样的照相机是焦段值越小越广UE5中的摄像机是焦段值越大越广。然后当玩家点击瞄准时将摄像机的焦段从105变换为75以此来达到一个瞄准镜放大效果。不过这里不能直接将摄像机焦段从105变到75而是有个过渡。此时我们可以通过插值节点来完成这个过渡。该节点的Current就是当前值Target就是目标值DeltaTime就是多久刷新一次InterpSpeed就是变换速度。这里我们设置Current为摄像机当前的焦段Target就是75刷新时间DeltaTime的话我们就设置每一帧刷新一次我们可以通过获取场景差量节点来得到上一帧和这一帧之间的时间差值InterpSpeed我们设置为8。当玩家松开瞄准键取消瞄准时。然后我们创建一个以事件设置定时器节点这个节点就是如果Looping勾选上的话那么每隔Time时间就执行一次Event事件。这里我们将Looping勾选上表示循环执行。然后通过获取场景差量节点设置Time这样就每一帧都执行OutFOV事件了。然后将前面的平滑修改摄像机焦段的操作复制下来只不过将Target修改为105即摄像机的默认焦段。然后我们先将定时器提升为变量然后重命名为OutFOVHandle。然后我们通过近等于节点判断当摄像机的焦段近等于105.0时我们就让OutFOVHandle定时器的Looping关闭。近相等节点就是比较A和B的插值是否小于Error ToLerance设置的值如果是的话就输出true。以句柄清除定时器使之无效就是让定时器的Looping关闭的节点。然后我们还需要考虑当玩家刚松开瞄准按键后又按下了瞄准按键那么此时OutFOVHandle定时器还没有结束即摄像机的焦段还没有近等于105时就要开始再接近75了。这样是肯定不行的所以当玩家按下瞄准键后我们就设置让OutFOVHandle定时器不在循环执行了。还有就是为什么上面设置的当瞄准时就不用定时器来让摄像机焦段变为75而是直接用一个插值节点。这是因为瞄准时需要快速响应所以就不用定时器了。而当松开瞄准时需要缓慢将摄像机焦段恢复到105所以使用一个定时器来将摄像机焦段缓慢恢复到105。然后我们将摄像机的默认焦段提升为变量这样后续想要修改摄像机默认焦段时直接修改这个变量的值就可以了。然后我们再创建一个UpdateDefaultFOV函数然后在该函数中获取到摄像机的视场然后赋值给DefaultFOV变量。然后我们在Event BeginPlay事件后执行UpdateDefaultFOV函数即当创建BP_FPSPalyer蓝图对象后执行一次UpdateDefaultFOV函数将摄像机的FOV值赋值给DefaultFOV变量即可。这样的好处是后续我们想修改摄像机的默认FOV时直接选中摄像机组件然后在右侧属性中设置它的视场值即可然后它的默认FOV就会同步更新到DefaultFOV变量中。注意摄像机的FOV不要设置的过高不然容易引起玩家的3D眩晕。3.完善灵敏度系统下面我们来完善灵敏度系统。现在角色不管是瞄准状态还是非瞄准状态它的灵敏度都是一样的但是通常在瞄准状态下灵敏度应该低一些下面我们就来进行这个设置。我们先打开BP_FPSPlayer蓝图然后在IA_Look事件后让ActionValue的X值在设置为控制器Yaw输入之前先乘两个值。第一个值就是先判断当前是否为瞄准状态然后根据是否为瞄准状态设置一个值。第二个值我们提升为变量命名为MouseSensitivity它表示整个游戏中角色的灵敏度。同理Y轴也这样设置。然后我们再添加一个UpdateScopeSensitivity函数在该函数中根据E_PlayerState的值来设置角色的灵敏度要乘的第一个值然后通过一个返回节点将这个值返回。然后我们选中UpdateScopeSensitivity函数在右侧属性面板将纯函数打上勾。然后此时使用该函数可以看到该函数就没有执行引脚了。然后将该函数的返回值连接到X轴和Y轴的第一个乘数上。然后我们现在还可以选中MouseSenditivity变量然后设置游戏的默认整体灵敏度了。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号