Unity-射线
前言
在游戏开发的过程中,许多功能的实现都需要物理检测,而 发射射线 是Unity中物理检测的通用方法。例如,我们需要检测玩家(Player)脚下是否是 地面(图层为 Ground),只需要从脚底发射一条射线,检测Player脚下GameObject的图层是否为Ground即可。
射线和物理检测何其重要,因此使用单独一篇笔记进行记录,防止自己忘记。
射线
在Unity2D中,发射一条射线需要用到 Physics2D.Raycast 函数,它将返回一个RaycastHit2D 变量,因此射线写法如下:
RaycastHit2D (变量名) = Physics2D.Raycast(起始位置, 方向, 距离, 图层);
if((变量名)) //该变量为bool变量,可用于判断
{.......}
上述代码的意思是,再 指定位置 朝向 指定方向 创建一个 指定长度 的射线,当射线碰撞到 指定图层 时,返回 true。
让我们举一个实际的例子,来看看代码是如何运作的。
...
public float footOffset = 0.0f;
public float wallCheck = 1.0f;
...
RaycastHit2D leftCheck = Physics2D.Raycast(new Vector2(-footOffset,-0.9f), Vector2.left, wallCheck, Ground);
在上述代码中代码,一开始创建了一个 RaycastHit2D 类型的变量,将其命名为 leftCheck。紧接着调用了 **Physics2D.Raycast** 函数,并将各种参数(位置, 方向, 距离, 图层)传入函数中。在上述代码中,他的 起始位置 是一个新建的坐标(-footOffset,-0.9f),方向为向左,长度为一个float变量 wallcheck,检测的图层是 Ground。
这些代码在执行过程中,会从起始位置(-footOffset,-0.9f)向左发射一条长度为wallCheck的射线,当射线碰撞到图层(LayerMask)为Ground 的对象时,就会返回类似于 “我碰撞到Ground图层了!”的信息。一条射线可能会返回多种信息,它会将这些信息打包存入RaycastHit2D的对象实例中并将其返回。这时我们通过访问 RaycastHit2D 对象实例,就可以知道这条射线所获取的所有信息。
当然,Physics2D.Raycast() 还有很多种写法,可以运用于不同的场景,这里时间有限只学了一个。
参考资料
Physics2D-Raycast - Unity 脚本 API (unity3d.com)
RaycastHit2D - Unity 脚本 API (unity3d.com)
标签:Unity,Raycast,射线,RaycastHit2D,图层,Ground From: https://www.cnblogs.com/MMMMrD/p/17832324.html