【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,一经查实,立即删除!

相关文章

2023 年安徽省职业院校技能大赛信息安全管理与评估项目技术规范

2023 年安徽省职业院校技能大赛(高职组) “信息安全管理与评估”项目技术规范 一、竞赛项目行业、职业技术标准 本赛项涉及的信息网络安全工程在设计、组建过程中,主要有以下 9 项国家或国际标准,参赛队在实施竞赛项目中要求遵循…

Python连接MySQL数据库操作指南

Python是一种非常流行的编程语言,它可以连接和操作多种类型的数据库。其中,MySQL是一种广泛使用的关系型数据库管理系统,它可以存储大规模数据,并支持高并发访问。在本文中,我们将介绍如何使用Python连接和操作MySQL数…

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

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

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

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

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

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

[ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘

Oceanbase 安装成功后关闭OCP,在重新启动时报错 使用OBD 启动OCP报如下错误 [adminobd ~]$ obd cluster start ocp Get local repositories ok Search plugins ok Open ssh connection ok Load cluster param plugin ok Check before start ocp-server x [ERROR] …

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…

3、APScheduler: 详解Trigger种类和用法【Python3测试任务管理总结】

APScheduler提供了多种类型的触发器(Trigger),每种触发器适用于不同的任务调度需求。 触发器包含调度逻辑。每个作业都有其自己的触发器,该触发器确定作业应该在何时运行下一次。除了它们的初始配置之外,触发器是完全无状态的。 常见的触发器及其用法 1. SimpleTrigger…

【基础篇】1.4 IO分配(二)

1.7 ADC ADC外设指的是模拟数字转换器(Analog-to-Digital Converter,简称ADC)的硬件设备。ADC是一种将模拟信号转换为数字信号的电子设备,广泛应用于各种数字信号处理系统中。 ADC外设通常作为一个独立的集成电路芯片&#xff0…

springboot(ssm宠物美容机构CRM系统 宠物服务商城系统Java系统

springboot(ssm宠物美容机构CRM系统 客户关系管理系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#xff…

uniapp和vue如何使用SheetJS导出excel?

uniapp和vue如何使用SheetJS导出excel? SheetJS中文文档详解 一、SheetJS是什么 SheetJS是一款适用于浏览器和Node.js的开源电子表格解析库。 与其他电子表格解析库相比,SheetJS拥有强大的电子表格解析功能,即使电子表格很大,也可…

Transformer注意力机制模型介绍

文章目录 前言高层次的自我关注(Self-Attention at a High Level)编码器(Encoder)多头注意力机制(The Beast With Many Heads)残差神经网络解码器(Decoder)线性(Linear)层和softmax层位置编码总结参考文献前言 Transformer是一个利用注意力机制来提高模型训练速度的模型。关于…

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

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

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

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