一、 介绍
Physics.Raycast是Unity中用于执行射线投射检测的函数,它可以检测一个射线是否与场景中的物体相交,如果相交,还可以获取到碰撞点的位置、碰撞物体的信息等。
二、 方法
Physics.Raycast函数的常用参数如下:
origin:射线的起点位置,通常是一个Vector3类型的数据。
direction:射线的方向,通常是一个Vector3类型的数据。
distance:射线的最大检测距离,通常是一个浮点数,表示射线可以检测到的最远距离。
layerMask:射线可以检测到的物体的层级掩码,通常是一个整数,表示射线可以检测到哪些层级的物体。
queryTriggerInteraction:指定射线是否可以与触发器进行交互,通常是一个枚举值,可以设置为Ignore、UseGlobal或Collide。
hitInfo:用于存储射线碰撞信息的变量,通常是一个RaycastHit类型的变量。
使用Physics.Raycast函数时,需要传入起点位置、射线方向、最大检测距离等参数,函数将会返回一个bool类型的值,表示射线是否检测到了物体。如果检测到了物体,则可以通过hitInfo参数获取射线碰撞到的物体的信息,例如碰撞点的位置、碰撞物体的层级、碰撞物体的法线方向等。
三、 举例子
Vector3 origin = new Vector3(0f, 1f, 0f); // 射线起点位置
Vector3 direction = new Vector3(0f, 0f, 1f); // 射线方向
float distance = 10f; // 射线最大检测距离
int layerMask = 1 << 8; // 只检测第8层的物体
RaycastHit hitInfo; // 碰撞信息
if (Physics.Raycast(origin, direction, out hitInfo, distance, layerMask, QueryTriggerInteraction.Ignore))
{
// 碰撞到物体
Debug.Log("Hit object: " + hitInfo.collider.gameObject.name);
Debug.Log("Hit point: " + hitInfo.point);
Debug.Log("Hit normal: " + hitInfo.normal);
}
else
{
// 没有碰撞到物体
Debug.Log("Not hit any object.");
}
上述代码中,首先定义了射线起点位置、射线方向、射线最大检测距离、射线可以检测到的物体层级等参数。然后使用Physics.Raycast函数进行射线投射检测,如果碰撞到了物体,则输出碰撞物体的名称、碰撞点的位置、碰撞物体的法线方向等信息;如果没有碰撞到物体,则输出“Not hit any object.”的提示信息。