Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >UE 实现鼠标点选模型

UE 实现鼠标点选模型

作者头像
用户3158888
发布于 2022-10-05 10:11:24
发布于 2022-10-05 10:11:24
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

楔子

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

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

准备知识

UE蓝图介绍

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

蓝图相关的基础知识,可以参考官方文档。 https://docs.unrealengine.com... https://docs.unrealengine.com... 后续也会写相关的文章介绍蓝图知识。

数学理论

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

  1. 获取鼠标点击的位置和方向(涉及到鼠标位置转换到三维空间坐标,可以设置内置方法获取)
  2. 通过位置和方向发射一条射线。
  3. 判断射线和那些对象进行相交(可以使用内置的方法获取),取最近相交的模型,就是鼠标点击获取的三维对象。

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

重载Pawn

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

有关Pawn的更多知识,Pawn

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

选择Pawn:

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

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

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

监听鼠标

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

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

获取鼠标位置和方向

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

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

构造射线

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
end = origin + directon * length

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

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

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

通过射线获取检测结果

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

其中:

  • start 表示射线起始点
  • end表示射线重点
  • Out Hit 表示检测到的对象
  • Return Value 是一个bool,true表示有对象命中,false表示没有对象命中。

中断命中结果

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

  • Condition 表示输入的条件,
  • True表示条件为真的时候的执行
  • False表示条件为否的时候的执行

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

获取结果信息

上面命中结果中:

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

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

显示鼠标光标

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

设置Pawn

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

结语

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
UE 实现镜头平移,旋转和缩放
在数字孪生三维场景中,通过键盘和鼠标来控制镜头的移动,缩放是很常见的行为,也是很必要的行为,用户正是通过这些操作,达到对整个三维场景的观看和控制。
用户3158888
2022/09/28
3.5K0
UE 实现镜头平移,旋转和缩放
个人塔防游戏Demo开发思路(UE4)
游戏为本人毕业设计,功能实现较为简陋,这里只是简要描述下开发思路,不包含深入的Gameplay框架分析,项目可无缝升级至UE4.26,素材全部来源于虚幻商城与互联网。完整项目下载,提取码:demo 游戏主体逻辑采用蓝图系统实现,支持多平台运行,包含存档功能,进入游戏后玩家可以在预先设置好的摆放位置购买和升级防御塔。游戏共有5波敌人,包括最终的BOSS关卡。在击败BOSS通关后即可进入无尽模式,此时游戏难度会不断提高,直到游戏结束。
LonelyEnderman
2023/08/09
1.3K0
个人塔防游戏Demo开发思路(UE4)
数字孪生:第三人称鼠标操作
最近制作了能开箱即用的UE5鼠标组件,直接拷入一个文件,再拖到场景中,就能使用了,可以控制相机的平移、旋转、缩放
Jean
2022/08/31
1.1K0
UE4 GamePlay架构学习篇
现在UE4刚免费不久,网上的资料还很少,有一些UE3的大佬出了一些学习的帖子。通过参考前辈的文章+通过查阅官方文档和官方的模板案例测试得出如下结论,供学习参考:
全栈程序员站长
2022/11/09
1.7K0
UE4 GamePlay架构学习篇
跟我用TypeScript做一个FPS游戏
原文:How to Create a Simple FPS in Unreal Engine 4
车雄生
2021/11/10
1.8K0
跟我用TypeScript做一个FPS游戏
【Unity3D】鼠标射线点击,UI出现在鼠标点击的位置
创建一条射线Ray需要指明射线的起点(origin)和射线的方向(direction)。这两个参数也是Ray的成员变量。注意,射线的方向在设置时如果未单位化,Unity 3D会自动进行单位归一化处理。射线Ray的构造函数为 :
恬静的小魔龙
2020/03/10
5.5K0
UE导入FBX、GLTF模型
虽然做了很多年的三维可视化,不过都主要还是web端开发为主(webgl,threejs,有兴趣的读者也可以关注下我的相关专栏)。最近准备入手一下UE,顺便做一下知识梳理。 所以文章可能都是比较粗浅的,对于UE大佬可以忽略。
用户3158888
2022/09/26
3.4K0
UE4 ContentExamples:Network_Features
最近一直没有弄过UE4了 和同事沟通的时候,看了下 Network_Features 今天自己简单记录一下 等 微积分 复习完,再考虑别的
dodo_lihao
2018/09/12
1.1K0
UE4 ContentExamples:Network_Features
UE4新手常用C++API
//C++暴露给蓝图可编辑 UCLASS(Blueprintable) //创建FString FString::Printf(TEXT("aa bb")); //蓝图调用变量 UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) //限制条件范围 meta = (ClampMin=0.1,ClampMax = 100) //蓝图识别组件 UPROPERTY(EditAnywhere, BlueprintReadWrite
Ning@
2021/11/10
3.6K0
UE4新手编程之创建C++项目
 虚幻4中常用的按键和快捷键 虚幻4中有一些按键和快捷键很常用,牢记它们并运动到实际的项目开发中,将会大大地提高你的工作效率和使得工作更简便快捷。下面将列举它们出来: 按键   动作  鼠标左键   选择actor  鼠标左键+拖动   前后移动和左右旋转摄像头  鼠标右键   选择actor并打开右键菜单  鼠标右键+拖动   旋转摄像头方向  鼠标左键+鼠标右键+拖动   摄像头上下左右移动  鼠标中键+拖动   摄像头上下左右移动  滑轮向上   摄像机向
用户1198337
2018/01/19
3.1K0
UE4新手编程之创建C++项目
UE5的World Partition
世界分区,是UE5给大世界项目提供的一套新的解决方案。相比于UE4的WorldComposition有了非常多的改进。官网也有很具体的介绍:
quabqi
2024/01/07
3.2K0
UE5的World Partition
UE 中脚部 IK 使用总结
本文主要关于如何在 UE 中配置 Foot IK。其背后的算法、原理因为涉及内容较多,后面会单独另外写一篇。
太阳影的社区
2022/09/08
2.7K0
游戏开发之在UE4中编写C++代码控制角色
当你运行我们上次做完的项目,你可能会意识到我们移动的摄像机还是默认的那个摄像机,这个默认的摄像机可以自由飞翔。这一节,我们要使得开始的角色是我们的一个Avatar类的实例对象,并且使用键盘控制我们的角
用户1198337
2018/01/19
3.1K0
游戏开发之在UE4中编写C++代码控制角色
UE4网络模块解析(一)
客户端所有的操作如击杀等都需要传到中央服务器来运算,得到的运算结果下发到各个客户端。服务器是UE4多人游戏的重要组成部分。它做出所有重要决策,包含所有权威状态,处理客户端连接,前往新地图,处理开始比赛、结束比赛等整个游戏流程。
玖柒的小窝
2021/12/14
7600
射影几何变换的基本原理
在上一篇文章中我完成了整个流出的前半部分:让用户从电脑中选择图片,自动制作成UE4贴花,并贴到地面上。本文讨论如何在非地面的平面/曲面上动态贴贴花。3D引擎中的贴花(decal)技术是以射影几何学为基础的投影材质,相比于表面材质(surface material),轻量的贴花材质在特定场合下有更好的性能,比如贴海报、静态液体、局部纹理,本文讨论贴花后半部分关于空间几何变换的基本原理。
Jean
2020/11/06
2K0
UE4 WebUI插件使用指南
在开发数字孪生应用程序的时候,除了三维场景展示之外,也需要开发丰富和酷炫的2D页面。 使用UE4的UMG开发图表显得比较笨拙。 而通过Web插件允许开发者创建丰富的基于Web HTML5的用户界面,它由内置在UE4中的web浏览器提供支持,包括对Windows、Mac、Linux、Android和iOS的支持。 基于这种插件技术,普通的前端开发人员也可以开发UE4界面上丰富的2d页面效果。
用户3158888
2023/01/08
3.1K0
UE4 WebUI插件使用指南
为虚幻引擎开发者准备的Unity指南
游戏开发小Y
2024/01/18
8980
为虚幻引擎开发者准备的Unity指南
3D场景中物体模型选中和碰撞检测的实现
在3D场景中常用的一个需求就是鼠标在屏幕上点击特定位置,选中一个物体模型,进行下一步的操作。比如说移动、旋转变形或者改变物体模型渲染外观等等。具体怎么实现呢?这涉及到把二维坐标转换到三维场景里,进行检测找到选种的模型。
程序你好
2021/07/23
2.6K0
3D场景中物体模型选中和碰撞检测的实现
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
通过从相机发射出一条射线,根据射线碰到的点来获取当前鼠标的世界坐标信息 和 当前鼠标点击的物体信息
呆呆敲代码的小Y
2021/09/14
1.8K0
【Unity3D 灵巧小知识点】☀️ | Unity通过 射线 获取 鼠标的世界坐标 和 鼠标点击的物体信息
UE4流动的箭头曲线实现原理
当我们需要表达一个路径的时候,使用路径箭头的方式可以进行一个很好的表达。我们制作一个静态的路径箭头是很容易的,但是我们怎么能做一个流动的箭头路径呢?这里面需要解决的问题:怎么制作出可以动态调整路径的曲线?怎么解决路径上的箭头会受到拉伸、平面中断影响导致箭头不连续的问题?
Jean
2021/10/27
3.8K0
UE4流动的箭头曲线实现原理
相关推荐
UE 实现镜头平移,旋转和缩放
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验