2015-09-17 55 views
1

我正在創建第三人稱動作遊戲,其中玩家是直升機,他可以在移動時拍攝其他物體。問題是我正試圖找到位於相機中心的圓圈內的敵方物體,我需要跟蹤它們並拍攝它們。碰撞檢測Unity3d中某些相機區域中的物體

Raycast不會幫助,因爲我需要更厚的raycast,所以我嘗試了spherecast和insulecast。 我有一個GUI元素,可以讓玩家想到他可以射擊的位置。當使用Spherecast或Capsulecast時,當敵人靠近但當敵人遠遠落後時,它正在工作,我猜球形投影變小時沿着z行進,並且不會大多數時間都不會擊中對象。

if (Physics.SphereCast (startPoint, 1f, transform.forward, out hit)) { 
      if (hit.collider.CompareTag ("Shootable")){ 
       Debug.Log(hit.collider.name); 
       Destroy(hit.collider.gameObject); 
      } 
     } 

I want to track objects which are inside the circle in the center

我從相機光線投射看見,所以我在想,如果有什麼做的像從相機這將是適宜的circlecast。如果不是,我該怎麼辦?

任何幫助真的很感激。

+1

如果您希望檢測相機視口中錐形區域內的敵人,而不是使用球體/射線照相,則可以嘗試檢查相對於相機前方的敵方位置角度向量。 (摘自[這個統一的答案](http://answers.unity3d.com/questions/261539/how-to-make-a-raycast-have-a-waider-range-of-hit.html)。) – Serlite

+0

謝謝回覆。爲了做到這一點,我們必須遍歷相機中可見的所有敵人。如果我在場景中有很多敵人......不會影響性能,因爲我必須在更新 –

+0

中運行這個嗯,敵人的預期/最大數量是多少個數量級?這可能仍然值得嘗試,看看你的表現問題是否有效。 – Serlite

回答

1

如果要檢測敵人是否位於相機前方的錐形區域內,則使用SphereCastRayCast將無法​​滿足您的需求。相反,你可以考慮檢查一個敵人的相對位置和你的相機的前向矢量之間的角度,看它是否低於一個特定的值,因此在錐體內。

換一個角度60度視場,並假設你你的敵人存儲Transform組件陣列/列表,你的代碼可能看起來像:

foreach (Transform enemy in enemies){ 
    if (Vector3.Angle(transform.forward, enemy.position - transform.position) < 30){ 
     Destroy(enemy.gameObject); 
    } 
} 

希望這有助於!如果您有任何問題,請告訴我。 (回答改版自this Unity question。)

+0

謝謝。我沒有經歷任何劇烈的性能下降,所以我認爲我會堅持這種方法。 –

+0

太棒了,很高興我能夠幫忙。 – Serlite