在这种情况下,我想用一个物体来填充一个空区域,但是如果该区域不为空,我就不想在那里放置一个物体。
特别是针对一个立方体,所以我不确定checkSphere()是否适用。
我是一个初学者,在寻找答案时遇到了很多麻烦,虽然我知道它可能在线上,但我很难找到一些能够让我理解代码的东西,甚至找到那段代码。
尝试使用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
}
或者,当然,您也可以这样做:
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 false;
}
else
{
return true;
}
}
intersecting.Length != 0
呢?没有必要使用分支语句。(此外,intersecting.Length != 0
通常比!(intersecting.Length == 0)
更易读。) - UnholySheepGameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>() ;
foreach(object go in allObjects)
{
float dist = Vector3.Distance(PositionToMatch, go.transform.position);
if(dist <...)
//Here what you need
}
Vector3.Distance会返回距离。你可以根据游戏对象的大小(半径或直径)设置限制。
contains()
方法,Unity 变换层次结构也没有。 - Draco18s no longer trusts SE