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,但模仿他們沒有幫助,坦率地說,我不明白它會如何。
你的遊戲是自上而下還是側面滾動?我問,因爲你總是把光線發送到右側。你應該使用玩家的歸一化向量給敵人。另外,你有沒有考慮過使用Physics2D.Linecast?我認爲在你的情況下會更容易 - > https://docs.unity3d.com/ScriptReference/Physics2D.Linecast.html – Cabrra
嘿,你對方向絕對正確。當玩家的方向不給我任何東西時,我正在搞不同的方向。我編輯了真正的方向回到帖子。然而,這對任何一個方向都沒有什麼影響,並且linecast也沒有找到任何東西。 – user2354664
最好的調試方法是使用可視化調試。就在RayCast或LineCast在該方向從敵人向玩家繪製一條調試線並查看需要的位置。讓我知道發生什麼事。 – Cabrra