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;
}
}