2016-08-14 147 views
1

我正在爲我的敵人計算一個視覺錐,如果玩家在裏面,我試着用Physics2D.Raycast來檢查它們之間是否有對撞機,以便使確定敵人沒有通過牆壁看到玩家。Physics2D.Raycast沒有找到任何東西

無法看透的牆壁來自網格,並附有網格對撞機 - see this pic。他們也在一個特定的層面上,我試圖限制我的Raycast。

我的代碼非常簡單。如果敵人面對玩家,並且玩家足夠近,則發射射線。

if (distanceToPlayer < viewDistance && dirToPlayer == dir) { 
    // player is in cone, check for collision 
    LayerMask lm = LayerMask.NameToLayer ("WallCollisions"); 

    RaycastHit2D hit1 = Physics2D.Raycast(transform.position, (player.transform.position - transform.position).normalized, 1000, lm.value); 
    RaycastHit2D hit2 = Physics2D.Linecast (transform.position, player.transform.position); 

    return true; 
} 

當return語句破檢查的熱播,它總是看起來是這樣的:

{UnityEngine.RaycastHit2D} 
centroid: {(0.0, 0.0)} 
collider: (null) 
distance: 0 
fraction: 0 
normal: {(0.0, 0.0)} 
point: {(0.0, 0.0)} 
rigidbody: (null) 
transform: (null) 
Non-public members: 

這意味着什麼也沒有找到。

另外,還要注意的是,在事先知情同意,保護被網狀所包圍,這意味着不論方向的,應當有規定的距離內命中..

我見過很多人都byteshifting到他們的LayerMasks,但模仿他們沒有幫助,坦率地說,我不明白它會如何。

+0

你的遊戲是自上而下還是側面滾動?我問,因爲你總是把光線發送到右側。你應該使用玩家的歸一化向量給敵人。另外,你有沒有考慮過使用Physics2D.Linecast?我認爲在你的情況下會更容易 - > https://docs.unity3d.com/ScriptReference/Physics2D.Linecast.html – Cabrra

+0

嘿,你對方向絕對正確。當玩家的方向不給我任何東西時,我正在搞不同的方向。我編輯了真正的方向回到帖子。然而,這對任何一個方向都沒有什麼影響,並且linecast也沒有找到任何東西。 – user2354664

+0

最好的調試方法是使用可視化調試。就在RayCast或LineCast在該方向從敵人向玩家繪製一條調試線並查看需要的位置。讓我知道發生什麼事。 – Cabrra

回答

0

現在解決了。爲了幫助未來,網格碰撞器是3D的,所以Physics2D射線廣播不會找到它。使用多邊形對撞機解決了一切。