Unity-射线

发布时间 2023-11-14 19:20:08作者: Daliuteliu

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)