HitResult结构体

[复制链接]

该用户从未签到

3

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
跳转到指定楼层
楼主
发表于 2017-8-8 22:12:52 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
更多虚幻4相关资料,请关注微信公众号《猎梦虚幻研究社》


HitResult是虚幻4中一个非常重要的数据类型,本篇将从蓝图的角度去介绍它所包含的数据以及相关数据的用法。

首先看一下它的属性构成:


HitResult是一个结构体,它的声明在EngineTypes.h头文件当中。
简短的看一下这个结构体的注释和声明:


由注释可以看出来,这个结构体是用于存储射线信息的结构体。
这里要先说明一下,虚幻4中的Hit是做什么用的。
有些朋友会觉得Hit翻译过来就是击打的意思,所以应该就是攻击或者造成伤害之类的事件。
其实那些事件应该是属于Damage相关的事件。这里的Hit单指射线Hit到物体的事件。

从上面的蓝图截图也可以看出来HitResult包含了哪些信息。
而翻到引擎源代码中,代码的内容其实就是几个属性的声明,构造函数和各种Get函数,所以我就直接按照蓝图来进行说明了。

当我们使用射线或者其他的会产生Hit碰撞的事件时,就会产生HitResult的返回值。
这个HitResult的信息量很大,但是通常我们每次用到的只有少部分。

现在我逐个解释每个参数的意义和用途:

Blocking Hit:表示这个射线是否碰到了blocking collision的物体,也就是射到的物体的碰撞属性是否为block的,如果是则返回真,如果为其他情况(比如Overlap或者没有Hit到物体)则返回假。

Initial Overlap:这个属性我没有用过,看注释是说如果射线在开始时以初始化的Overlap模式射出,那么就会返回真。在这种情况下有些值的解释就会变得不同。Time将会变成0,ImpactPoint会等同于Location,而Normals将会被解释并且等同为一个不穿透的Vector(通常使用各种射线函数时,这个值都被设置为false,所以不用管它,反正我没有用过这个值)。

Time:这个表示射线射到物体的时间,范围为[0.0, 1.0),也就是大于等于零且小于1。如果为1就表示射线到了终点,但是没有触发Hit事件。我个人觉得这个时间倒是可以作为判断射中物体离发射点的距离用。比如人物从手上向前射出1000的距离,如果TIme为0.5,那么基本就能知道射中的物体离人物的手有500的距离。

Location:Hit到的点在世界中的坐标,也就是返回Hit到的坐标,注释中介绍,当你Hit到一个Swept的物体时(参考SetActorLocation中的Swept参数),它不会穿透过这个障碍,而是返回一个你可以放置物体的值,也就是说不会有碰撞体重叠的情况。经过我测试,实际上就是当你使用球形射线或者其他体积射线时,会以球的中心点坐标来返回,区别于下面一个参数。

Impact Point:射线实际射中的物体的点。从字面意义上来说,这个值可能会比上面的Location更精确一点,也就是当你使用球形或者别的形状的射线时,会以射线的实际接触点为返回值。如果是线性射线的话,这两个值是相同的。

Normal:有过3D软件使用经验的人都知道,这个词看起来是普通的意思,但它实际上的意义是“法线”。也就是说你射中的点的法线组成的Vector。比如你射线射中一个平行于你的面,那他就会返回一个相反的方向。如果你射中一个斜面,那么他就会沿着斜面折射向另外一个方向,射线始终与Hit到的点所在的面垂直。

Impact Normal:和Location一样,法线同样有两个不同版本的参数。注释上写,如果是线性射线的话,这两个法线返回的值是一样的,等同于Normal。

Phys Mat:就是Physical Material Reference的缩写。返回射线Hit到的物理材质,比如说子弹射击到钢板的材质上和射击到水里会产生不一样的效果和声音,就可以用物理材质来判断并且进行选择相应逻辑。

Hit Actor:这应该是最常用的输出结果了,返回射线碰到的Actor。通常可以将这个值Cast成别的蓝图类,然后调用其中的方法,可以实现各种瞄准交互或者远程的间接交互功能。

Hit Component:这个类似于上面的Hit Actor参数,只不过返回的是组件,比Actor更细致一层。假如你的Actor有多个组件(人物角色,有骨骼组件作为人物模型本身,还有静态网格组件作为盔甲,不同的部位还可能会有不同的组件)这个时候就能返回这个被Hit中的组件,比如角色被打中护盾不掉血,打中盔甲掉少量的血等等。

Hit Bone Name:返回Hit中的骨骼的名字,只有当Hit中了骨骼网格时才有效。

Hit Item:当有Primitive类型的物体被Hit中时,返回Primitive信息。我没用过,不做过多解释。

Face Index:这个是在新版本中添加的参数,看注释的解释是说如果是三角网格面,或者是地形的网格面,那么就会返回它的索引值。我也没用过,不知道干什么用的。

Trace Start:这个和射线本身有关,返回的是射线的起始点,也就是设置射线时的Start参数的值。

Trace End:同样是射线本身的属性,返回的是射线的终点,也就是设置射线时的End点。这里注意,不管射线有没有Hit到物体,这个返回值始终是返回射线预先设置好的终点,而不是Hit到的Location。


了解过HitResualt结构体以后,我们就可以开始使用射线来创建一些射线行为了,总之FHitResult结构体在整个引擎中都是一个非常重要的数据,在以后将会频繁使用。





分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表