【UE5.2】从零开始控制角色移动、游泳、下潜、上浮

目录

效果

步骤

一、项目准备 

二、控制角色移动 

三、控制角色游泳

四、实现角色潜水、上浮

五、解决在水面上浮的Bug


效果

步骤

一、项目准备 

1. 新建一个空白工程,创建一个Basic关卡,添加第三人称游戏资源到内容浏览器

2. 在插件中启用“Water”插件

重启后点击“将项目条目添加到DefaultEngine.ini”

3. 在场景中删除Floor

激活地形模式

分段大小选择“15x15四边形”,然后点击创建

回到选项模式,将“Water Body Lake”拖入场景中

设置“WaterBodyLake”的碰撞预设为“WaterBodyCollsion”

4. 在Mixamo网站上选择要下载的角色下载

分别下载Idle、Runing、Swimming、Treading4个状态的动画

5. 将下载的资源导入UE,先导入角色

导入4个动画

不勾选“导入网格体”选项,然后点击导入所有

导入完成后资产如下:

二、控制角色移动 

1. 选中骨骼,然后创建混合空间1D

这里命名为“BS1D_Idle_Run”,表示站立和跑步的混合

打开“BS1D_Char_Loco”,更改水平坐标名称为Speed,最小轴值设为0,最大轴值设为200,权重速度设为4

将站立的动画放在坐标最左边,将跑步的动画放在最右边

此时我们可以按住Ctrl然后滑动鼠标来调整预览点,观察速度发生改变时,角色的动画变化:

2. 继续选中角色骨骼,再创建一个混合空间1D,这里命名为“BS1D_Tread_Swim”,表示在水中浮动和游泳的混合

打开“BS1D_Tread_Swim”,水平坐标名称设置为“Speed”,最大轴值为300,权重速度为4

将水中漂浮的动画放在最左边,将游泳的动画放在最右边

如果我们感觉游泳的动作太慢了,我们可以双击游泳动画来打开资产详情

将比率范围由1改为2

3. 选中骨骼,创建动画蓝图

这里命名为“ABP_Character”

打开“ABP_Character”,在事件蓝图开始播放时获取到第三人称角色蓝图的引用

将第三人称角色蓝图的引用转换为有效的Get

在事件蓝图更新动画时获取有效的第三人称角色引用,将第三人称角色的速度提升为变量,变量命名为“Speed”

在动画图表中将变量“Speed”传给混合空间1D“BS1D_Idle_Run”,然后输出姿势

4. 打开第三人称角色蓝图“BP_ThirdPersonCharacter”

先选中“网格体”组件,然后在细节面板中将骨骼网格体资产替换为我们下载的角色的骨骼网格体

动画类选择我们创建的动画蓝图“ABP_Character”

我们可以将弹簧臂组件往上偏移一点

5. 在世界场景设置中修改游戏模式重载为“BP_ThirdPersonGameMode”

此时运行游戏已经可以看到控制角色移动了:

三、控制角色游泳

1. 新建一个蓝图接口,这里命名为“BPI_Swiming”

打开“BPI_Swiming”,添加两个新函数,这里命名为“EnterWater”和“ExitWater”

2. 选中大纲中的“WaterBodyLake”,创建父类为Actor的蓝图

蓝图命名为“BP_WaterBodyLake”

在蓝图“BP_WaterBodyLake”的事件图表中,当Actor与水体开始/结束重叠时,就通知目标执行蓝图接口函数“Enter/Exit Water”

3. 打开第三人称角色蓝图“BP_ThirdPersonCharacter”,在类设置中,添加蓝图接口“BPI_Swiming”

在事件图表中去实现“Enter Water”和“Exit Water”的具体逻辑

添加一个布尔类型变量,命名为“IsInWater”,用于表示此时角色是否在水体中

当进入水体时,设置“IsInWater”为True,离开水体时设置为False

添加一个浮点型变量,命名为“WaterDepthZ”,用于表示水深

当角色进入水体后设置一下水体深度为此时玩家位置的Z值

继续添加如下节点

每一帧都先判断此时玩家是否处于水体中,如果处于水体,就判断此时水位是否超过角色半高,

如果超过半高,就设置物理体积为水体积,设置运行模式为游泳

如果没超过半高,就判断水位是否低于角色半高

如果低于半高就取消水体积设置,运动模式切换回行走

选中“角色移动组件”,在细节面板中设置制动游泳速度为500

4. 打开动画蓝图“ABP_Character”,在事件图表中获取此时角色是否处于游泳状态。将“正在游泳”节点的返回值提升为变量,命名为“IsSwimming”。

在动画图表中添加如下节点

此时运行游戏,效果如下,角色可以在水中游泳,但是在水中漂浮时的浮力位置不对

5. 打开角色在水面漂浮的动画序列“Treading_Water”

修改导入平移,然后点击重新导入动画

可以看到运行游戏后,角色在水中漂浮的位置就是正确的

四、实现角色潜水、上浮

1. 复制一份输入映射“IA_Move” ,这里命名为“IA_SwimmingUp”

设置值类型为“数字(布尔)”

再复制一份,命名为“IA_SwimmingDown”

2. 打开“IMC_Default”

添加两个映射

3. 打开第三人称角色蓝图“BP_ThirdPersonCharacter”,在事件图表中添加如下节点

此时运行游戏可以看到我们就可以通过键盘1键控制角色下沉,0键控制角色上浮。但是出现了一个问题就是当角色已经漂浮在水面上时,我们再按下0键,角色还会不断向上移动,这显然不符合实际,因此我们需要继续解决这个问题。

五、解决在水面上浮的Bug

1. 打开骨骼“Ch02_nonPBR_Skeleton”

找到骨骼“Neck”

添加一个插槽

切换到后视图调整一下插槽位置

2. 打开项目设置,搜索“channel”,点击“新建检测通道”

通道命名为“Swimming”,默认响应为“Ignore”

3. 回到第三人称角色蓝图“BP_ThirdPersonCharacter”,在事件图表中添加如下节点,表示每帧从“Neck插槽”位置向上发出长度为50cm的射线

4. 打开水体蓝图“BP_WaterBodyLake”,碰撞预设设置为“Custom”,通道“Swimming”的碰撞响应设置为阻挡

此时运行游戏效果如下,红线表示没有检测到与水体的碰撞,绿线表示检测到了

5. 回到“BP_ThirdPersonCharacter”,关闭射线检测的线条绘制效果

 

添加一个布尔类型的变量,这里命名为“CanSwimmingUp”,表示此时角色是否能够上浮

如果检测到了水体就表示此时可以上浮,否则不可以上浮

然后我们就可以根据变量“CanSwimmingUp”的结果来作为角色上浮的限制条件

最终效果如下

参考视频:

https://www.bilibili.com/video/BV12N411B7tf/?spm_id_from=333.999.0.0&vd_source=36a3e35639c44bb339f59760641390a8

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

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

相关文章

IDEA——还在手动new对象set值嘛,GenerateAllSetter插件帮你解决!!!

IDEA插件 一、GenerateAllSetter插件介绍二、如何下载安装三、如何使用 总结 最近项目上有些测试需要有很多属性,而且大部分的属性都是要设置值的,一个一个手动set设值很繁琐,就想着有没有能解决这个问题的办法,就发现了一个非常好…

HarmonyOS(十二)——全面认识HarmonyOS三种渲染控制

渲染控制概述 ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句&#xff…

微软Microsoft二面面试题分享通过总结(不是标准答案分享

误打误撞 我写的shitty代码 当年面试算法开发岗竟然通过了 Background 先说下背景,软件工程本科毕业之后,当年8月到北欧读两年制硕士。面试发生在当年的11月,微软哥本哈根,location在丹麦的哥本哈根lingby(是不是这么…

C++异步网络库workflow系列教程(3)Series串联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的两篇博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 简介 首先,workflow是任务流的意…

ThingWorx/Vuforia—工业物联网和AR平台

产品概述 ThingWorx是美国PTC公司旗下的一款物联网和AR平台,它提供了适用于IoT的开发工具和能力,使开发者可以为工业物联网快速构建和部署变革性的智能互联解决方案,使创新者能够快速为当今的智能互联世界提供优异的应用程序、解决方案和用户…

人工智能计算机视觉:解析现状与未来趋势

导言 随着人工智能的迅速发展,计算机视觉技术逐渐成为引领创新的关键领域。本文将深入探讨人工智能在计算机视觉方面的最新进展、关键挑战以及未来可能的趋势。 1. 简介 计算机视觉是人工智能的一个重要分支,其目标是使机器具备类似于人类视觉的能力。这…

k8syaml提供的几个有意思的功能,Kubernetes在线工具网站

k8syaml.cn 提供的几个有意思的功能。 一、yaml资源快速生成 之前编写operator的helm的时候就需要自己写deployment、service、configmap这些资源,那么多字段也记不清,都是先找个模版,然后copy改改,再看官方文档,添加…

智能优化算法应用:基于和声算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于和声算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于和声算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.和声算法4.实验参数设定5.算法结果6.参考文献7.MA…

Jenkins Pipeline 脚本优化实践:从繁琐到简洁

引言 在持续集成的过程中,Jenkins Pipeline 是非常关键的一环。它定义了如何自动编译、测试和部署代码。随着项目的不断发展,Pipeline 的复杂性也在不断上升,这就需要我们持续优化 Pipeline 脚本,以提高代码的可读性和维护性。本…

Python如何匹配库的版本

目录 1. 匹配库的版本 2. Python中pip,库,编译环境的问题回答总结 2.1 虚拟环境 2.2 pip,安装库,版本 1. 匹配库的版本 (别的库的版本冲突同理) 在搭建pyansys环境的时候,安装grpcio-tools…

RT-DETR优化:轻量化卷积设计 | DualConv双卷积魔改RT-DETR结构

🚀🚀🚀本文改进: DualConv双卷积魔改v8结构,达到轻量化的同时并能够实现小幅涨点 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; RT-DETR模型创新优化,涨点技巧分享,科研小助手; 1.DualC…

软件测试经典面试题(答案解析+视频讲解)

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

真正可行的vue3迁移到nuxt3方法(本人亲测,完全避坑)

终于到了总结经验的时候了,这绝对是全网唯一、完全真正可行的干货。 在我看来,知识就是要拿来分享的,分享给他人也是在提高自己。我绝对不会搞什么订阅或者vip专栏来搞钱坑害各位, 因为我在csdn写文章最主要的目的是为了记录和总…

OpenJDK十几种发行版中强烈推荐的发行版:Adoptium Eclipse Temurin和Amazon Corretto

Adoptium Eclipse Temurin官网地址:Home | Adoptium 支持及维护它的厂家: 说明:它的前身是著名的AdoptOpenJDK,更新到jdk16后就停止更新了,因为AdoptOpenJDK移交给Eclipse基金会后改名为:Adoptium Eclipse…

多线程 (下) - 学习笔记

常见锁策略 乐观锁和悲观锁 悲观锁 总是假设最坏的情况, 每次去拿数据的时候都会认为会被别人修改, 因此会上锁, 防止数据在使用过程中被别的线程修改, 乐观锁 假设数据一般情况下不会产生并发冲突,因此在拿数据,操作数据的过程中不加锁, 而在数据进行提交更新的时候, 才会正…

LeetCode day24

LeetCode day24 今天主打一个快乐happy(▽ʃ♡ƪ),主要是今天写哈夫曼树被经典文件读取坑麻了(为啥绝对路径能读取,相对不行。罢了) 一个中等题,但是咋感觉很小学捏。。。 2177. 找到和为给定整数的三个连续整数 相…

C与C++编程语言的区别和联系

一、引言 C和C是两种广泛使用的编程语言,它们都在软件开发领域有着广泛的应用。虽然C是从C语言演化而来的,但两者之间存在一些重要的区别和联系。本文将详细介绍这两种编程语言的相同点和不同点,并通过实际例子进行说明。 二、C与C的相同点 …

RocketMq常见问题

如何保证消息不丢失? 产生丢失消息的节点主要有以下几点 生产者发到brokerbroker把消息从缓存写入磁盘breker同步到从节点消费者消费消息消息积压太多, 会删除历史消息, 这里不会校验消息有没有消费 解决: 生产者同步发送消息, 如果发送失败, 写重试逻辑, 如果重试多次还失…

基于Java SSM框架实现抗疫医疗用品销售系统项目【项目源码+论文说明】

基于java的SSM框架实现抗疫医疗用品销售系统演示 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,抗疫医疗用品销售平台当然也不能排除在外。抗疫医疗用品销售平台是以实…

微服务黑马头条(简略笔记)

Linux中nacos的拉取安装 拉取naocs镜像:docker pull nacos/nacos-server:1.2.0创建容器:docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8848 nacos/nacos-server:1.2.0访问地址:http://192.168.200.130:8848/n…