[英]How to make raycast ignore Trigger colliders?
我有一個檢查游戲對象是否可以看到另一個游戲對象而沒有任何阻礙其視圖的功能:
public bool CheckVision(GameObject target)
{
RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange));
if(ray.collider.name == target.name)
{
Debug.DrawRay(transform.position, target.transform.position - transform.position);
return true;
}
else
{
return false;
}
}
唯一的問題是,我不希望它與設置了“ isTrigger”標志的碰撞器碰撞。 我希望射線廣播僅忽略它們。 有任何想法嗎?
不需要此圖層蒙板操作。 如果僅是忽略標記為觸發器的碰撞器,則不必使用圖層。 現在,此操作是在Unity 5.2及更高版本中內置的。
1。對於3D,將QueryTriggerInteraction.Ignore
傳遞給Physics.Raycast
函數。
int layer = 1 << LayerMask.NameToLayer("Default");
Physics.Raycast(cameraRay, out hit, distance, layer, QueryTriggerInteraction.Ignore);
2。對於2D,如果您不希望Physics2D.queriesHitTriggers
檢測到觸發器,則將其設置為false
。 如果您希望它再次檢測觸發器,請將其設置為true
。 確保在調用Physics2D.Raycast
函數之前進行設置。
不要檢測觸發器:
Physics2D.queriesHitTriggers = false;
檢測觸發器:
Physics2D.queriesHitTriggers = true;
您正在尋找2D版本。
注意事項 :
我已經看到有關在某些特定版本的Unity上無法正常運行的報告,但這是一個錯誤,但是我認為它現在已修復。 如果不是,則使用lssten描述的層 。
要使射線廣播忽略5.2中的所有觸發對撞機,請轉到:
編輯>項目設置>物理>取消選中“查詢命中觸發器”
(如果您使用的是Unity的舊版本,則該復選框稱為“ Raycasts Hit Triggers”)
實際上,在版本5.2.0f3中,它不再顯示Raycasts ...,現在顯示為:“查詢命中觸發器”取消選中是否希望raycast通過觸發器對撞機。
在忽略Raycast上更改觸發的GameObjects圖層或使用LayerMask https://docs.unity3d.com/ScriptReference/LayerMask.html
int targetLayer = 1 << LayerMask.NameToLayer("Target Layer");
public bool CheckVision(GameObject target)
{
RaycastHit2D ray = (Physics2D.Raycast(transform.position, target.transform.position - transform.position, m_VisionRange, targetLayer ));
if(ray.collider.name == target.name)
{
Debug.DrawRay(transform.position, target.transform.position - transform.position);
return true;
}
else
{
return false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.