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

news2024/12/25 9:15:26

目录

效果

步骤

一、项目准备 

二、控制角色移动 

三、控制角色游泳

四、实现角色潜水、上浮

五、解决在水面上浮的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.coloradmin.cn/o/1313260.html

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

相关文章

浅显易懂 @JsonIgnore 的作用

1.JsonIgnore作用   在json序列化/反序列化时将java bean中使用了该注解的属性忽略掉 2.这个注解可以用在类/属性上   例如:在返回user对象时,在pwd属性上使用这个注解,返回user对象时会直接去掉pwd这个字段,不管这个属性有没…

bat 脚本的常用特殊符号

1、 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号…

iPhone手机中备忘录如何改变字体颜色

作为一名iPhone用户&#xff0c;我经常使用手机备忘录来记录生活中的点点滴滴。这样&#xff0c;我的大脑就能从繁琐的记忆任务中解脱出来&#xff0c;专注于更重要的事情。 而且&#xff0c;我有一个特别的习惯&#xff0c;那就是使用不同颜色的字体来区分不同的备忘录。这样…

开源治理典型案例分享(汇编转)

当前&#xff0c;越来越多的企业申请通过信通院的开源治理成熟度评估和认证&#xff0c;获得增强级或先进级评估。这些企业包括中国工商银行股份有限公司、中国农业银行、上海浦东发展银行股份有限公司、中信银行股份有限公司、中国太平洋保险&#xff08;集团&#xff09;股份…

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本&#xff0c;然后点击“启动 MetaHuman Creator” 等待一段时间后&#xff0c;在如下页面点击选择一个人…

【Linux】进程周边004之进程的调度与切换(领略Linux系统进程调度算法的神奇)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程切换 2.进程调度 2.…

java.lang.NegativeArraySizeException

构建maven项目时发生的异常 maven-resources-production:gci-system-start:java.lang.NegativeArraySizeException:-1972174848解决方案 先将 target 目录删除,然后重新构建项目即可

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

Notes2024节气和日历来了

大家好&#xff0c;才是真的好。 还有三周就是2024年了。 2024的节假日安排其实早就发布&#xff0c;有些人已经把这些节假日安排都写在自己的日历上了&#xff1b;同时我们这里也设置了一份&#xff0c;包括节假日和农历二十四节气以及中西传统的节日日期等。 如果你需要的…

SuperMap iClient3D for Cesium 实现鼠标移动选中模型并显示模型对应字段

SuperMap iClient3D for cesium 实现鼠标移动选中模型并显示模型对应字段 一、实现思路二、数据制作1. 计算出模型中心点并保存到属性表中2. 计算出模型顶部高程3. 模型数据切缓存4. 发布三维服务. 三、代码编写 作者&#xff1a;xkf 一、实现思路 将模型属性数据存储到前端&a…

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数

Kafka系列之:统计kafka集群Topic的分区数和副本数,批量增加topic副本数 一、创建KafkaAdminClient二、获取kafka集群topic元信息三、获取每个topic的名称、分区数、副本数四、生成增加topic副本的json文件五、执行增加topic副本的命令六、确认topic增加副本是否成功一、创建K…

[SpringBoot]之入门级教学分享

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发》。&#x1f3af;&#x1f3af;…

SE考研真题总结(二)

接上条&#xff0c;今天继续更新~ SE考研真题总结&#xff08;一&#xff09;-CSDN博客文章浏览阅读340次&#xff0c;点赞6次&#xff0c;收藏11次。本帖开始分享考研真题中设计【软件工程】的部分&#xff0c;预计会出5期左右&#xff0c;敬请期待~https://blog.csdn.net/js…

【NSX-T】8. 搭建NSX-T环境 —— 配置 Tier-1 网关

目录 8. 配置 Tier-1 网关Lab 说明8.1 创建 Tier-1 网关8.2 将Segment连接到 Tier-1 网关8.3 使用网络拓扑验证 Tier-1 网关配置8.4 验证 T1 网关 参考资料 8. 配置 Tier-1 网关 创建 Tier-1 网关将网段连接到 Tier-1 网关使用网络拓扑验证 Tier-1 网关配置测试东西向 L3 连接…

shopee选品分析:如何在Shopee平台上进行选品分析

在Shopee平台上进行选品分析是卖家成功的关键因素之一。通过深入了解市场、竞争对手和用户需求&#xff0c;您可以找到有潜力的产品&#xff0c;并制定出更有效的选品策略。以下是一些建议和方法&#xff0c;可以帮助您更好地进行选品分析。 先给大家推荐一款shopee知虾数据运营…

《PySpark大数据分析实战》-04.了解Spark

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

scratch遇见春天 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch遇见春天 一、题目要求 1、准备工作 2、功能实现 二、案例分析

mysql:通过INFORMATION_SCHEMA数据库查询表的元信息

使用SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA database_name AND TABLE_NAME table_name;查询某个表的元信息。其中database_name替换为数据库名称&#xff0c;table_name替换为表的名称。 例如&#xff0c;下面语句&#xff0c;查询development数据库中…

毅速:金属3D打印引领制造业进入新时代

随着科技的飞速发展&#xff0c;3D打印技术逐渐渗透到各个领域&#xff0c;为制造业带来了革命性的变革。其中&#xff0c;金属3D打印技术以其独特的优势&#xff0c;正逐渐成为制造业的新宠。 金属3D打印&#xff0c;也称为金属粉末烧结&#xff0c;是一种利用高能激光束将金属…

C语言--求数组的最大值和最小值【两种方法】

&#x1f357;方法一&#xff1a;用for循环遍历数组&#xff0c;找出最大值与最小值 &#x1f357;方法二&#xff1a;用qsort排序&#xff0c;让数组成为升序的有序数组&#xff0c;第一个值就是最小值&#xff0c;最后一个是最大值 完整代码&#xff1a; 方法一&#xff1a; …