【UE】抓取物体

news2024/11/21 2:21:27

目录

效果

步骤

一、制作准心

二、简单的第三人称视角偏移

三、基于屏幕正中央的打点与射线

四、物理抓取的实现(抓取、放下、丢出)


效果

步骤

一、制作准心

1. 新建一个HUD,这里命名为“HUD_ZhunXin”,同时复制一个第三人称模板蓝图,这里命名为“BP_Character”

2. 在世界场景设置中,设置默认pawn类为“BP_Character”,HUD类为“HUD_ZhunXin”

3. 打开“HUD_ZhunXin”,点击重载“接收绘制HUD”

此时会出现如下节点,该节点输出的“SizeX”和“SizeY”分别表示视口尺寸的长和宽

接下来我们就要在视口中心画一个十字准心,可以通过“绘制线条”节点来分别绘制一条横线和竖线来表示准心。“绘制线条”节点如下,需要传入线段起始点和终点的坐标,LineColor是线段的颜色,LineThickness表示线条的粗细

通过如下节点,我们就可以绘制出十字准心中的横线线段(起始点与终点的纵坐标不变,横坐标分别在中心点横坐标基础上加减5)

再绘制出竖线线段(起始点与终点的横坐标不变,纵坐标分别在中心点纵坐标基础上加减5)

此时运行游戏可以看到十字准心已经绘制在视口正中心的位置

二、简单的第三人称视角偏移

为了让抓取时从摄像机看到的视角比较直接,这里需要对第三人称角色模板蓝图中的摄像机做一点偏移,打开“BP_Character”

对“FollowCamera”的位置和旋转做一点调整,如下所示

此时运行可以看到摄像机的画面相对于人物向右偏移了一点

还需勾选“使用Pawn控制旋转”

三、基于屏幕正中央的打点与射线

1. 还是先打开“BP_Character”,新建一个图表,这里命名为“物理抓取”

然后添加一个“物理柄组件”

在图表“物理抓取”中添加如下节点,这样当我们点击鼠标后就会从屏幕中心向场景中发出一条射线

四、物理抓取的实现(抓取、放下、丢出)

1. 首先我们创建一个actor蓝图,命名为“BP_Cube”,打开“BP_Cube”,添加一个立方体组件。该蓝图代表可被抓取的物体

一定要勾选模拟物理,并且设置网格体是可移动的

将“BP_Cube”放入场景中,为了区分我们更改材质为红色

2. 打开“BP_Character”,继续添加如下节点

当我们发出射线后,先判断有没有检测到物体,如果检测到了就判断该物体的类型是不是“BP_Cube”(就是我们想抓取的这一类物体),如果是的话获取到Hit Component,

然后我们就可以利用物理柄组件来抓取物体

为了防止抓取的物体撞到玩家自己,我们设置Hit Component忽略所有Pawn的碰撞

在刚开始抓取的时候加一个判断,如果“Hit Component”不是有效的就把他抓起来

 如果是有效的就把物体放下,然后把“Hit Component”置为空

还需添加如下节点,每帧设置物理抓取组件的位置

此时我们已经完成了抓取和放下的功能,效果如下:

此时有个问题是,当拾取的物体碰到其他物体时会产生非常大的旋转,我们可以通过增大网格体的角阻尼来解决这个问题:

接下来制作将物体丢出去的功能,如下图,主要通过添加冲量的方式来向指定方向扔出物体

效果如下:

参考视频:

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

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

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

相关文章

51单片机晶体管数字编码

51单片机 单片机型号:STC86C52RC/LE52RC 晶体管 数字编码 数字P0P1P2P3P4P5P6P7011111100101100000211011010311110010401100110510110110610111110711100000811111110911110110 00011 11110x3F10000 01100x0620101 10110x5B30100 11110x4F40110 01100x6650110 110…

Qt设计一个自定义的登录框窗口

今天写了一个Qt登录、注册的小demo,后续完善会连接MySQL使用,过几天写完我会放在github上。 主要页面: 动态演示: 写完这个界面后,我终于知道了Qt为什么几乎没什么好看的窗口设计了,随便写一个简单大方的登…

【OpenCV实现平滑图像处理】

文章目录 概要2D 卷积(图像过滤)模糊图像(平滑图像)中值模糊双边过滤小结 概要 在图像处理中,低通滤波器是一种常用的技术,用于平滑、模糊或降低图像的噪音。这种滤波器通过去除图像中高频部分&#xff08…

基于FPGA的电风扇控制器verilog,视频/代码

名称:基于FPGA的电风扇控制器verilog 软件:QuartusII 语言:Verilog 代码功能: 基于FPGA的电风扇控制器 运用 EDA SOPO实验开发系统设计一个基于FPGA的电风扇定时开关控制器,能实现手动和自动模式之间的切换。要求: (1)KI为电…

PLM如何与MES管理系统协同工作

产品生命周期管理(PLM)和MES生产管理系统是现代企业中不可或缺的生产管理工具。它们分别负责产品的设计和制造过程,对于提高企业的生产效率和产品质量具有重要作用。然而,要实现高效的生产管理,PLM和MES需要进行协同工…

Python---练习:使用for循环嵌套实现打印九九乘法表

思考: 外层循环主要用于控制循环的行数,内层循环用于控制列数。 基本语法: # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 ,就可以是range(1, 10) -----也就是从1,到9。 参考while循环…

笔记43:ResNet 结构详解

笔记本地地址:D:\work_file\DeepLearning_Learning\03_个人笔记\2.图像处理任务\ResNet网络学习 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

DTO、VO、BO、PO等各种XO汇总

贫血模型和富领域模型 1.POJO对象(Plain Old Java Object) Plain Old Java Object(POJO),它的本来含义是指一个常规的、不受任何框架、平台的约束和限制的Java对象。可以认为,如果一个模块定义的对象皆为POJO,那么除了依赖JDK,它…

聚团队之力,学领军之道——麒麟信安组织开展卓越领导力主题培训

为提升高层次管理人员的领导力水平,为企业上市后高速发展以及高效运营提供更好支撑,日前,麒麟信安组织开展卓越领导力主题培训,公司领导层、各部门负责人以及各项目、技术骨干共同参加。 麒麟信安总裁刘文清作开训致辞。刘总指出&…

Python---练习:使用for循环实现用户名+密码认证

案例: 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确(usernamelaowang,passwordlw123) ③ 登录仅有三次机会,超过3次会报错 思考: 用户登陆情况有3种: ① 用户名错误(此时…

Ctrl+Alt+L或Ctrl+Alt+M或Ctrl+Alt+S热键无法启用(华硕天选)与armoury creat冲突

其实就是冲突了,但是就是检测不到(spy测不到,其他哪个open啥啥啥的直接进不去内核模式)。然后去找了个按键检测,发现都是找不到按键按下的事件,能检测到按键抬起事件,判断要么是应用占用&#x…

常见面试题-MySQL专栏(一)

为什么 mysql 删了行记录,反而磁盘空间没有减少? 答: 在 mysql 中,当使用 delete 删除数据时,mysql 会将删除的数据标记为已删除,但是并不去磁盘上真正进行删除,而是在需要使用这片存储空间时&…

vue源码分析(二)——vue的入口发生了什么

文章目录 前言(1)vue 项目构建的时候,通过package.json文件看到构建入口(2) 构建入口页面:导入同级模块config的getAllbuilds方法(3) 通过传入参数中的builds对象使用map获取&#x…

Python---for循环嵌套

for循环嵌套,就是一个for循环里面嵌套另外一个for循环的写法。 当循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。 基本语法: # 外层循环 for i in 序列1:# 内层…

Typecho 添加 Emoji 表情报错「解决方案」

Typecho 添加 Emoji 表情报错 文章目录 Typecho 添加 Emoji 表情报错前言Emoji 表情utf8mb4 与 UTF8 解决方案[1] 数据库编码更改[2] 数据库配置文件更改 前言 Typecho 添加 Emoji 表情不支持,报错 Database Query Error Emoji 表情 Emoji 就是表情符号&#xff0c…

VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,删除.lck文件夹和文件

一、如图 二、原因 因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果系统突然崩溃,虚拟机就来不急把已锁定的文件解锁。当你再次启动虚拟机的时候,会提示这类错误信息。 三、解决 进入虚拟机文件夹,…

node模块导出引入两种方式和npm包管理

模块化的好处 在 Node.js 中每个文件都被当做是一个独立的模块,模块内定义的变量和函数都是独立作用域的,因为 Node.js 在执行模块代码时,将使用如下所示的函数封装器对其进行封装 (function(exports,require,module,__filename,_dirname){//…

JavaScript-2-菜鸟教程

字符串 可以使用 索引 位置访问字符串中的每个字符 可以使用内置属性 length 来计算字符串的长度 var txt "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln txt.length;<script>var x "John"; // x是一个字符串// 使用 new 关键字将字符…

p5.js 变换操作

本文简介 带尬猴&#xff0c;我嗨德育处主任 在 canvas 里&#xff0c;变换是基础功能。很多基于 canvas 封装的库都有这功能&#xff0c;比如 《Fabric.js 变换视窗》。 变换是针对画布进行全局调整的一种能力&#xff0c;它可以对画布进行全局移动、缩放、旋转等操作。 p5…

hibernate源码(2)--- springboot-jpa是如何引入的

starter引入 要想看jpa是如何将hibernate引入容器&#xff0c;首先要看的是 spring-boot-starter-data-jpa 如何引入依赖&#xff1a; 如果注意的话&#xff0c;starter的包内容其实没有什么实质的内容&#xff0c;关键是pom里的依赖 pom中规定了各依赖和依赖的版本&#xf…