UE4 手电筒射线检测

UE4 手电筒射线检测

功能物品:手电筒射线
功能描述:用于对NPC造成伤害或者有其他交互左右的物品
实现方法:每隔0.2秒发射几百根射线用于检测。
在这里插入图片描述

首先在摄像头上绑定一个SpotLight,初始设置不可视,用来当手电筒。
然后设置两个bool变量CanUseFlashLight?和HasFlashLight?,初始值都设为false,当玩家拾取手电筒时,会将HasFlashLight?设置为true,CanUseFlashLight?是手电筒射线的冷却,只有当这两个变量同时满足条件时才能开启手电筒射线。
定义一个事件用来做手电筒的冷却条,冷却时间视情况而定。(E Now是当前冷却时间)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这之后可以添加一个手电筒射线照射期间持续的声音,先定义一个变量“音频组件”命名为Aduio。
在这里插入图片描述
在这里插入图片描述

现在要先做两个宏,第一个是while loop with Delay,用来规定手电筒发射射线的时间间隔和次数。
在这里插入图片描述

然后在射线的照射期间不能使用手电筒射线,并将手电筒的光源颜色设置为紫色,将射线间隔设置为0.25s,发射次数为8次。发射完后,要把光源颜色设回白色。延迟2s的意思是手电筒射线只发射8*0.25=2s的时长,手电筒射线冷却2+13=15s。
在这里插入图片描述

第二个是“计算圆点坐标”,思路就是求出半径从小到大每个圆间隔角度的每个点的坐标,x0,y0为圆心。
x1=x0+rcos(anglePI/180)
y1=y0+rsin(anglePI/180)
首先定义宏的4个输入 FX/Y, FZ , 半径, Angle和对应的变量。输出x,y坐标即可。
在这里插入图片描述

因为灯光是绑定在摄像机上面的,所以射线是从摄像机上面发出,以摄像机面朝方向为一个平面,摄像机的中心即为圆心,计算圆的Y轴即为世界坐标的Z轴,计算圆的X轴即为世界坐标的X或者Y轴(因为摄像机会平面旋转,暂时不考虑向上的照射,即把世界坐标的X轴当成计算圆的Y轴),所以需要先判断角色的旋转朝向。
在这里插入图片描述

然后创建一个结构体,命名为圆的坐标,设置两个变量,如下图:
在这里插入图片描述
在这里插入图片描述
在蓝图中添加一个变量“圆的坐标”并命名为圆的坐标,将变量改为数组。
在这里插入图片描述

在发射之前先将数组清空,将半径重置为-50,然后循环10个圆,每个圆增加50半径。然后每个圆上的坐标的角度Angle都间隔30,30*12=360。
在这里插入图片描述

然后先判断摄像机面朝方向是否为世界场景的Y轴,true是上面的,false是下面的。目的是通过宏循环计算出圆点坐标后,把每一轮8个圆上的所有坐标都存入数组,在后边打印出来。
在这里插入图片描述

在一个圆计算之后开始循环发射射线,for each loop需要将圆拆分成2个变量,然后还要分别判断摄像机的朝向去打印射线。
在这里插入图片描述

获取摄像机的世界位置,并拆分向量,如果摄像机面朝世界场景的Y轴,就将拆分出的Y轴和Z轴参与之前计算圆点的宏(相机是否朝前?为true);如果摄像机面朝世界场景的X轴,就将拆分出的X轴和Z轴参与之前计算圆点的宏(相机是否朝前?为false),拆分出来的向量不参与计算x或y的值不变,而将上图的X,Y坐标连到下图的创建变量,上图坐标X轴对应的是下图的创建向量的x或y值(视“相机是否朝前?”而定),上图坐标Y轴对应的是下图的创建向量的Z值。
得到的世界坐标加上摄像机的向前向量(朝向和长度)就得到了射线发射出去之后的圆点世界坐标。
在这里插入图片描述

在这里插入图片描述

之后break命中结果,将hit actor添加(添加唯一)到“hit ai”的数组中去,并调用ai蓝图中“被照射”事件,从而达到手电筒射线与ai交互。
在这里插入图片描述

在手电筒射线照射开始前还需要把“hit ai”的数组清空。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值