获取跨越鼠标线的多个游戏对象的列表
Get an list of multiple gameobjects that cross mouse line
实际上我正在使用以下代码来检测鼠标与某些对象之间的碰撞。
我希望代码捕获多个游戏对象(不仅是第一个,还有上面的)并将其存储在列表中。
我看了看 Physics.RaycastAll
但我有点困惑。
void Update ()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out hit))
{
if (hit.collider != null)
{
print (hit.transform.gameObject.name);
}
}
}
这里没有什么令人困惑的地方。唯一的区别是 Physics.Raycast
returns true
或 false
如果在 Physics.RaycastAll
returns 数组 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 个对象。如果你愿意,你可以增加它。
实际上我正在使用以下代码来检测鼠标与某些对象之间的碰撞。
我希望代码捕获多个游戏对象(不仅是第一个,还有上面的)并将其存储在列表中。
我看了看 Physics.RaycastAll
但我有点困惑。
void Update ()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out hit))
{
if (hit.collider != null)
{
print (hit.transform.gameObject.name);
}
}
}
这里没有什么令人困惑的地方。唯一的区别是 Physics.Raycast
returns true
或 false
如果在 Physics.RaycastAll
returns 数组 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 个对象。如果你愿意,你可以增加它。