unity中的检测包含了范围检测和射线检测
以下收录了唐老狮专栏的详解(唐老狮yyds)老师讲的特别简单易懂
【唐老狮】Unity——物理系统(射线检测) - 哔哩哔哩 (bilibili.com)
【唐老狮】Unity——物理系统(范围检测) - 哔哩哔哩 (bilibili.com)
在记录一则自己用到实例,是一个开启高亮显示的功能,就是从摄像机中心发射一条射线来记录接触的第一个物体
核心代码如下:
void SetInteractive()
{
Ray ray = new Ray(transform.position, transform.forward);
//检测是否对焦上物体
// RaycastHit用来保存射线的探测结果
RaycastHit info;
// 从muzzlepoint的位置,向摄像机面向的正方向射出一根射线
// 射线只能与m_layer所指定的层碰撞
bool hit = Physics.Raycast(ray, out info, InterDistance, m_layer);
string activeObjName = InterActiveManager.GetInstance().ActiveObjName;
//如果检测到物品 而且检测不重复
if (hit && activeObjName != info.transform.gameObject.name)
{
//就设置激活 激活后把当前激活的物品在管理类中进行一个设置
EventCenter.GetInstance().EventTrigger("SetInteractive" + info.transform.name);
InterActiveManager.GetInstance().ActiveObjName = info.transform.name;
}
//如果没有检测到物品 而且管理类中当前激活的物品不为空
else if (!hit && activeObjName!=null)
{
//先取消先前激活物品的激活状态 之后将管理类中的激活记号置为null
EventCenter.GetInstance().EventTrigger("CancelInteractive" + activeObjName);
InterActiveManager.GetInstance().ActiveObjName = null;
}
}