2

我正在尝试在给定区域内生成某些类型的拾音器,尽管有些通常会卡在墙壁内,我将如何解决这个问题?

用于移动物体的代码

for (int x = 0; x < garbage.Length; x++) 
{
    if (x < 5)
    {
        garbage[x].transform.position = new Vector3(Random.Range(-33.0f, 30.0f), 2.35f, Random.Range(30.0f, -35.0f)); 
    }
}

使用 Physics.OverlapSphere 修复它。谢谢。

4

2 回答 2

0

你可以在你的 if 语句中有一个 while 循环,所以它就像

int attempts = 0;
while(garbage[x].transform.position == /*[the range of coordinates for the wall]*/ || attempts = 0)
{
    garbage[x].transform.position = new Vector3(Random.Range(-33.0f, 30.0f), 2.35f, Random.Range(30.0f, -35.0f));
    attempts += 1;
} 
于 2018-06-01T14:08:10.213 回答
0

您可以尝试OnCollisionStay通过碰撞来解决这个问题。OnCollisionStay如果不小心使用,cpu 可能会很重,所以如果可以的话,你可能想想一个更好的方法。

您必须使用以下代码创建一个新脚本,并将其附加到您的加电预制件中。

bool keepChecking = true;
void OnCollisionStay(Collision collision)
{
    if(keepChecking)
    {
        if(collision.gameobject.tag == "Wall")
        {
            collision.gameobject.transform.position = new Vector3(Random.Range(-33.0f, 30.0f), 2.35f, Random.Range(30.0f, -35.0f));
        }
        else
        {
             keepChecking = false;
        }
     }
}

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionStay.html

阅读该链接并确保您的对象满足所有要求。你的墙和 Power-Up 应该有碰撞器,并且这两者中至少有一个应该有刚体。这些对象都不应该是运动学的。

让我知道这是否适合您。

于 2018-06-01T14:59:47.520 回答