假如游戏中有一个需要我们进行交互的物体,可以通过射线检测来判断角色与改物体是否满足条件(比如面向它且在一定距离之内)
首先创建了一个雕像,并且添加了两个粒子系统,smoke和fire,还有一个旋转的text。
当我们靠近该雕像且正视它时,按鼠标左键会使得smoke,fire,text被激活。
雕像的蓝图:
雕像的蓝图如上,游戏开始时smoke,fire,text都是不可见的。
写了一个函数active all,如果传入值是true,那么会将三者的值改为可见,且将控制text 是否旋转的text rotate布尔值也修改为true。
然后就是射线检测了,思路是首先需要在角色身上创建一个插槽作为射线的起始点,然后在将control rotation的作为视角方向。
这样发出的射线起始点为插槽,终点为 control rotation的vector * 长度 +插槽起始点。步骤如下:
在角色的骨骼里找到head,并且创建一个插槽,命名为socket_head;(如图,可以通过控制柄来自定义插槽的位置,不一定非在头上)
在角色蓝图中右键trace,会发现许多射线检测的函数,这里使用的是 line trace by channel;
通过上述确定了射线的起始点和终点,这里射线的长度为400;输出的是布尔值是射线是否被阻挡,如果被阻挡,强制转换阻挡射线的物体为statue,如果转换成功,说明是雕像阻挡了射线,再调用它的active all函数将smoke,fire,text激活。
刚进入游戏是这样的:
靠近并点击鼠标左键后被激活:
注意因为法线选择的是control rotation,所以我们必须将屏幕中心点对准该雕像才有用。
法线也可以选择其他方向。比如下面这个,是以鼠标在场景中的三维坐标为起点,方向为该点到摄像机
我们也可以把 draw debug type 打开,这样就能看到射线的具体位置了。
再比如这样些,使法线的方向一直为角色的forward方向,这样即使我们旋转control 也不会改变射线的发射方向