【UE】抓取物体

news/2025/1/15 17:35:08/

目录

效果

步骤

一、制作准心

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

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

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


效果

步骤

一、制作准心

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.ppmy.cn/news/1178711.html

相关文章

Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART

前言 本文主要讲解如何关于RK3588开发板UART的使用和调试方法,包括UART作为普通串口和控制台两种不同使用场景 一. 功能特点 Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准,完整模块支持以下功能: 支…

优化改进YOLOv5算法:加入ODConv+ConvNeXt提升小目标检测能力——(超详细)

为了提升无人机视角下目标检测效果,基于YOLOv5算法,在YOLOv5主干中实现了Omnidimensional Convolution(ODConv),以在不增加网络宽度和深度的情况下提高精度,还在YOLOv5骨干网中用ConvNeXt块替换了原始的C3块,以加快检测速度。 1 Omni-dimensional dynamic convolution …

随机生成验证码实例

random模块中函数随机生成验证码(由数字和字母组成) 一,random模块中的函数 random()函数,从[0,1)中随机生成一个浮点数,然后作为返回值。 def random() -> float random() -> x in the interval [0, 1). randi…

大模型分布式并行技术--分布式系统

近年来, 大多数出现在顶级人工智能会议上的模型都是在多个 GPU 上训练的, 特别是随着基于 Transformer 的语言模型的提出。当研究人员和工程师开发人工智能模型时, 分布式训练无疑是一种常见的做法。传统的单 机单卡模式已经无法满足超大模型…

第四章 文件管理 五、文件存储空间管理

目录 一、逻辑结构和物理结构的比较 二、空闲表法 1、磁盘中的空闲块表 2、例子 3、如何回收空闲区间 ①回收区的前后都没有相邻空闲区; ②回收区的前后都是空闲区; ③回收区前面是空闲区; ④回收区后面是空闲区; 三、空闲链表法 1、分类 2、空闲盘块链 &#xff…

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

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

winodos下使用VS2022编译eclipse-paho.mqtt.c并演示简单使用的 demo

本文演示C语言如何使用eclipse-paho.mqtt.c库,包含自行编译库的步骤或者下载编译好的文件。 1.下载paho.mqtt.c库源码(zip 文件) 到官网选择C版本的paho源码进行下载 Eclipse Paho | The Eclipse Foundation 或者到下述连接下载 Releases ec…

50.MongoDB快速入门实战

MongoDB概念 MongoDB是一个文档数据库(以 JSON 为数据模型),由C语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。 原则上 Oracle 和 MySQL 能做的事情,MongoDB 都能做(包括 ACID 事务&#x…