当前位置: 首页 > Web前端 > HTML

UE实现鼠标点击模型

时间:2023-03-28 13:30:13 HTML

wedge在双子场景中,点击3D物体是一个常见的操作。比如点击模型显示相关属性和图片,点击相机模型播放视频,点击建筑展开楼层等等。因此,点击式模型是数字孪生最需要的基础能力。准备知识UE蓝图介绍本文会涉及到一些蓝图知识。不懂蓝图,需要先了解UE蓝图知识。蓝图是虚幻引擎4的可视化脚本编写方法。也就是说,通常通过编写脚本来完成的任务现在可以通过节点和连接图来创建,而无需输出任何实际代码。关于蓝图的基础知识,可以参考官方文档。https://docs.unrealengine.com...https://docs.unrealengine.com...以后我也会写相关的文章介绍蓝图知识。数学理论UE鼠标点击模型的技术理论大致是这样的:获取鼠标点击的位置和方向(涉及到鼠标位置到三维空间坐标的转换,可以设置内置方法获取它)并通过位置和方向发射光线。确定射线与那些物体的交点(可以使用内置方法获取),取最近的相交模型,即鼠标点击得到的3D物体。如果你熟悉threejs,你就知道这有点类似于Threejs的raycaster。覆盖Pawn我们的蓝图是在一个重载的Pawn类中实现的,它是所有可由玩家或AI控制的Actors的基类。Pawn是游戏场景中玩家或AI实体的体现。这意味着Pawn不仅决定了玩家或AI实体的外观,还决定了它们如何与场景碰撞以及如何与其他物理交互。有些游戏可能没有玩家模型或头像在游戏中可见,因此在某些情况下这可能会造成混淆。然而,无论如何,Pawn仍然代表玩家或实体在游戏中的物理方向、旋转等。角色是一种可以行走的特殊Pawn。更多关于Pawn的知识,在内容浏览器中右击Pawn,新建蓝图->蓝图类:选择Pawn:在浏览器中输入名称:双击新建的蓝图类,进入蓝图编辑页面。与蓝图相关的基本操作,如添加节点、移动节点、连线等,这里不再赘述。监听鼠标在蓝图中监听鼠标事件(本文为右键)如下:Pressed表示按下,Released表示释放。获取鼠标位置和方向Blueprintnodeforgettingthemouseposition“ConvertMousePositiontoSceneSpace”其中目标是playercontroller,通过以下节点获取playercontroller:ConstructRay节点“ConvertMousePositiontoSceneSpace”即可获取鼠标所在的世界坐标和前进方向,分别设置为:原点和方向。其中origin不是射线的起点,通过矢量计算可以得到射线的终点:end=origin+directon*length其中length是一个常数,我们可以指定,所以计算end的蓝图如下:它涉及将一个常数乘以一个矢量蓝图节点,以及将两个矢量相加的节点。首先将世界方向乘以一个常数10000,计算结果加上世界位置得到终点。起点和终点最终会作为下一次计算的输入值。通过射线获取检测结果通过射线获取点击结果的节点为“DetectLinebyChannel”其中:start表示射线的起点end表示射线的焦点OutHit表示检测到的物体ReturnValueisabool,true表示有物体命中,false表示没有物体被命中。中断命中结果所谓中断命中结果,可以理解为命中打包结果分项。首先通过检测结果的返回值进行判断,命中结果中断。通过分支节点进行条件判断:Condition表示输入条件,True表示条件为真时执行,False表示条件为否时执行。在这个例子中,当条件为真时,执行被中断。Result:获取结果信息上面的命中结果中:HitActor即命中的演员。HitComponent是命中actor中的组件。如果有子组件网格可以被射线探测到,这里打印出相关信息后,即可进行相关操作:显示鼠标光标运行程序后,默认不显示鼠标光标。为了能够清楚的看到点击点,需要显示鼠标光标,比如按下tap键显示光标,如下:设置Pawn并重写Pawn类后,在程序设置中,需要将模型的Pawn改成我们重写的Pawn类生效,如下图:该方法检测模型的鼠标点击功能。最终效果如下图所示:点击时,打印对应组件的名称。如果您有好的经验,欢迎与我交流。关注公众号“ITMan表叔”添加作者微信进行交流,及时收到更多有价值的文章。