UE 实现鼠标点选模型

这篇具有很好参考价值的文章主要介绍了UE 实现鼠标点选模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

楔子

在孪生的场景中,点击三维对象是常用的操作。比如点击模型显示相关属性和图片,点击摄像头模型播放视频,点击楼宇展开楼层等等。

因此点选模型是属于数字孪生最必要的基础能力。

准备知识

UE蓝图介绍

本文会涉及到一些蓝图的知识,如果你对蓝图不了解,需要先了解下UE的蓝图知识。蓝图 是虚幻引擎4的可视化脚本方法。也就是说,通常要通过编写脚本来完成的任务,现在可以通过一个由节点和连接组成的图形来创建,而不必输出任何实际的代码。

蓝图相关的基础知识,可以参考官方文档。
https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/Blueprints/
https://docs.unrealengine.com/4.27/zh-CN/Resources/Showcases/BlueprintExamples/
后续也会写相关的文章介绍蓝图知识。

数学理论

UE鼠标点选模型的技术理论是大致这样的:

  1. 获取鼠标点击的位置和方向(涉及到鼠标位置转换到三维空间坐标,可以设置内置方法获取)

  2. 通过位置和方向发射一条射线。

  3. 判断射线和哪些对象进行相交(可以使用内置的方法获取),取最近相交的模型,就是鼠标点击获取的三维对象。

如果熟悉threejs,就知道这有点类似Threejs的raycaster。

重载Pawn

我们的蓝图在一个重载的Pawn类里面实现,Pawn 是可那些由玩家或 AI 控制的所有 Actor 的基类。Pawn 是玩家或 AI 实体在游戏场景中的具化体现。这说明, Pawn 不仅决定了玩家或 AI 实体的外观效果,还决定了它们如何与场景进行碰撞以及其他物理交互。某些游戏可能在游戏中没有可见的玩家模型或替身(Avatar),因此这点在某些情况下可能会令人困惑。不过,无论如何,Pawn 仍代表着玩家或实体在游戏中的物理方位、旋转角度等。Character 是一种特殊的、可以行走的 Pawn。

有关Pawn的更多知识,Pawn

在内容浏览器里面右键,新建蓝图->蓝图类:

UE 实现鼠标点选模型,UE

image.png

选择Pawn:

UE 实现鼠标点选模型,UE

image.png

然后在浏览器里面输入命名:

UE 实现鼠标点选模型,UE

image.png

双击新建的蓝图类,进入蓝图编辑页面。

UE 实现鼠标点选模型,UE

image.png

有关蓝图的基本操作,比如添加节点,移动节点,连线等此处不详细介绍。

监听鼠标

在蓝图中监听鼠标事件(本文是右键)如下:

UE 实现鼠标点选模型,UE

image.png

Pressed 表示按下,Released表示松开。

获取鼠标位置和方向

获取鼠标位置的蓝图节点“将鼠标位置转换为场景空间”

UE 实现鼠标点选模型,UE

 

image.png

其中的目标是玩家控制器,通过下面的节点获取玩家控制器:

UE 实现鼠标点选模型,UE

image.png

构造射线

节点“将鼠标位置转换为场景空间” 可以获取鼠标所在的世界坐标和向前的方向,分别设定为:origin和direction。其中origin为射线的原点,通过向量计算,可以获取射线的终点end:

end = origin + directon * length

其中length为常量,我们可以指定,因此计算end的蓝图如下:

UE 实现鼠标点选模型,UE

image.png

其中涉及到一个常量乘以向量的蓝图节点,和两个向量相加的节点。首先world direction 乘以一个常量10000,计算的结果在和world location相加,就可以得到终点。

起点和终点会最终作为下一步计算输入值。

通过射线获取检测结果

通过射线获取点击结果的节点是“由通道检测线条”

UE 实现鼠标点选模型,UE

image.png

其中:

  • start 表示射线起始点

  • end表示射线重点

  • Out Hit 表示检测到的对象

  • Return Value 是一个bool,true表示有对象命中,false表示没有对象命中。

中断命中结果

所谓中断命中结果的意思 可以理解把命中的包装结果进行分项拆分。
首先通过检测的结果return value 判断,命中则中断命中结果,条件判断通过分支节点来进行:

UE 实现鼠标点选模型,UE

image.png

  • Condition 表示输入的条件,

  • True表示条件为真的时候的执行

  • False表示条件为否的时候的执行

本实例中,条件为真的时候,执行中断结果:

UE 实现鼠标点选模型,UE

image.png

获取结果信息

上面命中结果中:

  • Hit Actor表示被击中的actor

  • Hit Component 被击中的actor中的component,如果有子组件mesh可以被射线检测到的话

获取到相关的信息后就可以执行相关操作,此处打印出相关的信息如下:

UE 实现鼠标点选模型,UE

image.png

显示鼠标光标

默认运行程序后, 鼠标的光标是不显示的,为了能够看清点击点,需要显示鼠标光标,比如按下tap键显示光标,如下:

UE 实现鼠标点选模型,UE

image.png

设置Pawn

重写了Pawn类之后,在程序的设置中,需要把模型的Pawn改成我们重写的Pawn类,才能生效,如下图所示:

UE 实现鼠标点选模型,UE

image.png

结语

本文说明了通过射线的方法检测鼠标点击模型的功能。 最终的效果如下图所示:

UE 实现鼠标点选模型,UE

image.png

点击的时候,打印对应component的名称。

欢迎关注ITman彪叔,可视化服务专家,提供三维可视化,数据中心,智慧园区,智慧楼宇,工业组态, 2d拓扑,大屏呈现等可视化专业服务。文章来源地址https://www.toymoban.com/news/detail-536607.html

到了这里,关于UE 实现鼠标点选模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4\UE5显示鼠标并自定义的鼠标样式

    UE4UE5中动态修改自定义的鼠标样式. 一,首先在UE场景中显示鼠标 二,创建Wedget  命名为UI_MyCursorStyle 三,在新创建的UI里设置自定义的鼠标样式图片 搜索鼠标,鼠标样式图片应有尽有  四,在Wedget里创建image  五,接着启动场景里更改鼠标样式 效果如下:  分享工程,有需要可

    2024年02月11日
    浏览(43)
  • 简单观察UE里Foliage吸附模型与地形的实现方式

    UE里,Foliage可以吸附所在的模型与地形: 本篇的目标是观察这个功能大概的实现方式。 首先,编辑器下的Foliage由每个关卡中的一个 AInstancedFoliageActor 来管理。 AInstancedFoliageActor 有一个成员 FoliageInfos : FoliageInfos 管理了每个FoliageType所对应的信息,以 FFoliageInfo 表示,而 FFo

    2024年02月08日
    浏览(32)
  • WPF 3D 使用3D Tools简单实现鼠标控制模型

    CSDN上下载一个资源, 3D模型导入wpf_wpf加载obj模型光线和相机配置-C#代码类资源-CSDN下载 从VS中打开,运行如下; 出来一个模型;   可以用鼠标旋转,翻转模型,从不同角度方位查看模型;    项目结构如下;  看一下鼠标功能是如何实现的; 在整个解决方案中找不到任何和

    2024年02月09日
    浏览(38)
  • UE获取当前鼠标点击位置坐标

    获取当前 鼠标点击位置的UE世界坐标 (x,y,z),效果如下图所示(为便于演示,下图显示了碰撞点位)。 2.1 蓝图代码 (1) 核心函数 的蓝图代码如下: (2)当鼠标左键按下时,调用函数,当前鼠标点击位置将会被打印在屏幕上。

    2024年02月09日
    浏览(61)
  • UE源码分析:Slate 类鼠标输入处理

    UE4.25版本 本章看一下UE的Slate响应鼠标/触摸的处理,主要是按下、移动、抬起等相关。 FWindowsApplication 是平台层的,处理Windows事件 FSlateApplication 是引擎层的核心处理 XXXViewport 逐渐过渡到用户层 其中 RoutePointerXXXEvent 中的XXX可能是Down/Moved/Up 通知Slate用户事件的开始/完成,以及

    2024年02月15日
    浏览(37)
  • UE源码分析:Slate 鼠标/触摸输入处理

    UE4.25版本 本章看一下UE的Slate响应鼠标/触摸的处理,主要是按下、移动、抬起等相关。 FWindowsApplication 是平台层的,处理Windows事件 FSlateApplication 是引擎层的核心处理 XXXViewport 逐渐过渡到用户层 其中 RoutePointerXXXEvent 中的XXX可能是Down/Moved/Up 通知Slate用户事件的开始/完成,以及

    2024年02月15日
    浏览(34)
  • 【UE】运行游戏时就获取鼠标控制

    我们经常在点击运行游戏后运行再在视口界面点击一下才能让游戏获取鼠标控制。其实只需做一个设置就可以在游戏运行后自动获取鼠标控制。 点击编辑器偏好设置 如下图,点击“播放”,再勾选“游戏获取鼠标控制” 这样当你运行游戏后直接就能通过鼠标控制游戏进行了

    2024年02月16日
    浏览(53)
  • UE4中实现鼠标拖动游戏中的物体

    一、显示鼠标光标、启用鼠标点击事件         可以在关卡蓝图中或者游戏模式中加入下面代码  二、点击物体进入选中状态  三、根据通道获取命中结果          通过这个函数可以获取当前鼠标光标下接触的actor,重新设定actor位置即可。这里可以将类型转换去掉,就可

    2024年02月11日
    浏览(51)
  • 【UE5 C++】鼠标点击发射射线获取物体信息

    UE小白,有错误的地方请指出。 本文使用UE5,如在UE4中使用可能需调整某些API 1.获取镜头控制器,并开启点击事件 2.鼠标点击发射射线 在Tick中调用射线发射逻辑 UE中API看起来没有分鼠标抬起和鼠标按下API,如有大佬知道可以评论一下。 1.获取镜头控制器,并开启点击事件

    2024年02月15日
    浏览(73)
  • UE4蓝图学习篇(七)--处理UMG鼠标穿透

    前提条件:控制器显示鼠标,使用鼠标进行上下左右看。 如图所示,我在UMG中添加了一个新的小界面,当拖动滑动条的时候你会发现我们的界面会跟随鼠标旋转,需要的效果是鼠标在UI区域拖动滑动条的时候,不会对我们的角色进行旋转,而出现在这个问题是因为在UI区域鼠

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包