2015-05-11 65 views
0

我製作了一個遊戲,我使用raycasting來確定玩家是否在物體上。我知道如何使用圖層來做到這一點,但我寧願這樣做,以便檢查它是否碰到帶有標籤的對象。繼承人的代碼:Unity Raycasting標籤而不是圖層

isObject = Physics2D.Linecast (this.transform.position, groundedEnd.position, 1 << LayerMask.NameToLayer ("Object")); 

因此,而不是比較名爲「對象」一layermask,我寧願它檢查如果它擊中同一個標籤的對象,但我不知道該怎麼更換LayerMask。

回答

1

您可以使用此代碼:

RaycastHit2D h = Physics2D.Linecast(p1, p2); 
if(h.collider.tag == "YOUR_TAG") 
{ 
    //Do your stuff 
} 
+0

這似乎沒有工作,它不承認我用該標籤擊中對象。有沒有辦法用某種標籤方法替換「<< LayerMask.NameToLayer」部分? – tomSurge

+0

不能。過濾對象用於使用圖層進行光線投射的能力來自於圖層數量有限,這使得統一可以保留便利的數據結構(我假設)對其進行過濾。但是,您可以擁有任意數量的標籤,這將違背此數據結構的優化目的。 –

+0

您還可以使用OnCollisionEnter2D事件檢測2D碰撞 –

1

沒有與2D光線投射,但檢查3D一raycasted打擊對象的標籤這一點,也許你可以改變它有點爲它申請經驗到2D:

RaycastHit raycastHit; 
if(Physicas.Raycast(from, to , out raycastHit, maxDistance)){ 
Collider = raycastHitCollider = raycastHit.collider; 
    if (raycastHitCollider.gameObject.tag == "Your tag here"){ 
    //do stuff 
    } 
}