這裏沒有什麼讓人困惑的。唯一的區別是,Physics.Raycast
返回true
或false
如果遇到什麼,而Physics.RaycastAll
返回RaycastHit
的數組。你只需要遍歷該數組RaycastHit
。
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hit = Physics.RaycastAll(ray);
for (int i = 0; i < hit.Length; i++)
{
if (hit[i].collider != null)
{
print(hit[i].transform.gameObject.name);
}
}
}
注意:
這是更好地使用Physics.RaycastNonAlloc
,而不是Physics.RaycastAll
如果要檢測每個對象命中。這不會分配內存,尤其是在Update
函數中執行此操作時。
//Detect only 10. Can be changed to anything
RaycastHit[] results = new RaycastHit[10];
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
int hitCount = Physics.RaycastNonAlloc(ray, results);
for (int i = 0; i < hitCount; i++)
{
if (results[i].collider != null)
{
print(results[i].transform.gameObject.name);
}
}
}
上面的代碼將檢測到最多10個對象。如果你願意,你可以增加它。
什麼讓RaycastAll困惑?文檔中甚至還有一個例子。 – Lestat