如何检查对象在统一C#中的特定位置是否存在?

Per*_*son 4 c# unity-game-engine

在这种情况下,我要用对象填充一个空白区域,但是如果该区域不为空,则不想在其中放置对象。这是专门针对多维数据集,因此我不确定checkSphere()是否有效。我是一个初学者,我很难找到该问题的答案,所以尽管我知道它可能是在线的,但我还是很难找到一些能以我理解的方式解释代码的东西,甚至找不到该代码。

Lau*_*nch 6

尝试使用Physics.OverlapSphere。您可以在要检查的Vector3点处定义一个球体(例如((2,4,0))。您可以给它一个较小的半径(甚至是0,但是您必须检查一下,我不确定它是否可行)。

它返回所有接触或在球体内的对撞机的数组。只需检查数组是否为空(或长度为0),如果为空,则什么也没有碰到。

您可以这样使用它:

Collider[] intersecting = Physics.OverlapSphere(new Vector3(2, 4, 0), 0.01f);
if (intersecting.Length == 0) {
    //code to run if nothing is intersecting as the length is 0
} else {
    //code to run if something is intersecting it
}
Run Code Online (Sandbox Code Playgroud)

或者,当然,您可以这样做:

Collider[] intersecting = Physics.OverlapSphere(new Vector3(2, 4, 0), 0.01);
if (!intersecting.Length == 0) {
    //code to run if intersecting
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

编辑:这是一个函数,如果点与对撞机相交,则仅返回true。

bool isObjectHere(Vector3 position)
{
    Collider[] intersecting = Physics.OverlapSphere(position, 0.01f);
    if (!intersecting.Length == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是返回相交。Length!= 0 ;?不需要分支(而且`intersecting.Length!= 0`总是比`!(intersecting.Length == 0)`更具可读性) (2认同)