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

时间:2017-10-15 17:51:19

标签: c# unity3d

在这种情况下,我期待一个带有物体的空区域,但如果该区域不为空,我不想在那里放置一个物体。 这是专门讨论一个多维数据集所以我不确定checkSphere()是否有效。 我是一个初学者,我在寻找这个问题的答案时遇到了很多麻烦,所以尽管我知道这可能是在线的,但我很难找到以我理解的方式解释代码甚至找到代码的东西。

3 个答案:

答案 0 :(得分:5)

尝试使用Physics.OverlapSphere。您可以在要检查的Vector3点定义球体(例如,(2,4,0))。你可以给它一个低半径(或者甚至是0,但是你必须检查它,我不是100%确定它是否有效)。

它返回一个触摸或在球体内的所有碰撞器的数组。只需检查数组是否为空(或长度为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
}

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

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

希望这有帮助!

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

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

答案 1 :(得分:0)

您可以尝试这样的事情:

首先收集场景中的所有GameObjects

GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>() ;

稍后你可以遍历那些gameObjects来检查它们的位置和PositionToMatch之间的距离,它应该是一个Vector3,你想要检查它是否已经存在

foreach(object go in allObjects)
{
    float dist = Vector3.Distance(PositionToMatch, go.transform.position);
    if(dist <...)
        //Here what you need
}  

Vector3.Distance将返回距离。您可以根据GameObjects的大小(半径或直径)设置限制

答案 2 :(得分:-1)

您可以使用.contains()来检查对象是否存在,在这种情况下,获取位置。我需要看到代码更准确