2015-08-23 169 views
1

所以我是Unity的新手,我確信我錯過了一個簡單的步驟,但在因某種原因在網上查找了一段時間後,我找不到解決方案。光線追蹤沒有正確響應

我在屏幕上有兩個物體,玩家和敵人。兩者均附有Rigidbody2D和Box Collider 2D。在Box Collider 2D上,我點擊了is triggered在Rigidbody2D上,我點擊了Is Kinematic。在球員上,我有一個簡單的動作腳本。對敵方目標我有這樣的:

void Update() { 
    RaycastHit2D hit = Physics2D.Raycast(transform.localPosition,transform.right,Mathf.Infinity); 
    Debug.DrawRay(transform.localPosition,transform.right); 
    if (hit) 
     Debug.Log(hit.collider); 
} 

現在,由於某種原因,當我移動玩家在對象if (hit) 是真實的,但如果我移動到任何地方播放器右側這是不正確的。這是什麼原因?謝謝。

+0

我猜這種行爲的原因是因爲你只是在右邊進行光線投射,而當你去傳遞右邊的物體時,沒有任何東西可以讓光線投射。 –

+0

我一定不理解光線投射的原理,我認爲這個代碼應該做的是發射一束光線到它的起源的右側,然後如果有什麼東西碰撞那條光線,命中就變成了真的。這是不是這是做什麼? – Beckley

回答

1

首先,您不需要Rigidbody進行raycast檢測,只需要碰撞器。其次,Physics2D.Raycast使用世界位置,而不是局部,因此用「transform.position」替換「transform.localPosition」,如果轉換是某種東西的孩子,這會使它變得非常混亂。請記住,您正在從變形的右側發送光線投射,所以也許它沒有達到任何效果,而且您​​獲得的價值實際上是正確的。

+0

嘿,所以我改變了它的transform.position,但它仍然沒有閱讀,當我有另一個對象傳遞它在右側。還有什麼我需要做的嗎?謝謝你的幫助。 – Beckley

+0

通過if語句修補它解決了它。謝謝。 – Beckley