射线检测

射线检测教程

—— By 欣然呐呐 && Konux


射线检测是个啥?

要弄清楚射线检测,首先我们需要知道射线是什么

啊,没错,和你想的大概差不多啦


对于上图的平面镜反射,相信上过初中物理的同学大概是非常熟悉了,上图激光笔发射出的激光就类似于射线

射线可以形象理解为从某点(端点)向某个方向发射出去的一束激光,啊对,就是这么简单

那么为啥上面说激光类似射线呢?因为射线函数的射线不会反射,当碰到障碍物就会直接停止

另外,在编辑器中的射线是看不见的,只能你自己脑补这个射线长啥样(


接下来看专业解释:

射线检测是一种用于在地图中获取信息的函数,可以获取地图中指定位置的指定方向上单位的信息

在高度检测、获取坐标点的单位信息、判断指定方向上是否存在单位、检测单位间是否存在障碍等等效果中会被用到


射线检测要用到哪些函数?

射线检测需要用到两种类型的函数:[物理学][射线检测参数]



前者用于发射射线,后者用来设置这个射线用来检测什么东西和被什么东西阻挡,由于发射函数比较简单,所以接下来先讲射线检测参数


射线检测参数

用于规定射线能够获取途经的哪些单位、能够被什么单位阻碍

注意:每当发射一次射线后,该参数会被重置,所以需要每次发射射线之前设置射线检测参数


射线检测的阻碍单位

能够阻断射线的单位,在不设置阻碍条件时不存在阻碍单位


如上图所示就是设置射线的阻碍单位是墙1这种单位,只要是墙1,就会挡住射线

另外注意:需要被射线检测的单位需要有碰撞,若是无碰撞,则不会被射线检测所检测到


射线检测的目标单位

可以被射线获取的单位(即射线检测能射到的单位),在不设置目标条件时默认为射线途经的全部单位(不包括阻碍单位)


这些目标单位会被存储在射线创造的单位组中(射线的单位组在发射射线的同时会自动创建,可以用最后的射线检测信息中的单位组获取,当然也可以用最后创建的单位组获取[不推荐]


建议使用如上方法,在发射射线后紧接着用变量来获取到射线检测里的单位组,避免单位组被丢失


实例解释

如图所示,蓝色单位为目标单位,红色单位为阻碍单位,白色为其他单位


注:图中黑色箭头为发射的预期射线,绿色为实际有效射线,两条射线实际上是重叠的,这里为了方便演示而刻意错开,射线不是实际存在的,这里画的射线只是便于理解

[物理学]从红圈位置向-90角度发射一条宽度为0.03的射线,最大距离10,就像下面这样


这条射线的阻碍单位为7号砖块,首个单位为2号砖块,射线的单位组中的单位有2、3、5号砖块

没用的小tip:这里的射线宽度的值的单位制是符合场景的单位制的,即0.03宽度就是3px的大小,0.64宽度就是一个普通0.64网格的大小,不过考虑到性能问题,建议射线宽度小于等于0.03


使用方法

先设置射线参数,然后发射射线,获取需要的信息或应用信息


1.设置参数


这两个参数的条件里不止能指定目标类型,也能有其他的选择,比如单位比较、单位数据类型比较等

另外这两个参数不是必须要的,这主要取决于使用射线检测的目的,比如希望获取一条线上的单位,那么阻碍条件就可以不写,希望获取一条线上有无阻碍或想获取阻碍点,就不需要目标条件的设置


2.发射射线

发射射线使用如下函数即可,其他两个射线函数表达的意思是相同的



3.获取需要的信息或应用信息


小tip:若射线没有被阻碍,那么阻碍坐标会是(0,0),一定要注意哦


综合使用实例

咱们想使玩家从空中瞬间垂直下落到自身底下的地板上,若途径之地有刺,那么就杀死玩家

下图是参考(这是假设射线一定能检测到地板的前提下,若有特殊情况,需要判断阻碍坐标是否为(0,0)以判断是否阻碍):



好了,本期射线教程就做到这里!