• 【UE】抓取物体


    目录

    效果

    步骤

    一、制作准心

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

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

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


    效果

    步骤

    一、制作准心

    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

  • 相关阅读:
    C/C++教程 从入门到精通《第十一章》——初识MFC
    使用Github Copilot完成代码编写
    电脑不小心格式化了,怎么恢复?
    部署SeaTunnel单节点Standalone 模式环境
    Vue3新特性指南:探索新增指令、内置组件和改进
    PDFView4NET 2022.09.02 Crack
    项目管理之系统交付
    使用linux系统IO函数实现 `cp`指令的功能
    SSTI模板注入
    ACM(数论)总结1
  • 原文地址:https://blog.csdn.net/ChaoChao66666/article/details/134062702