C# 防止在unity中生成的游戏对象重叠

C# 防止在unity中生成的游戏对象重叠,c#,unity3d,game-engine,C#,Unity3d,Game Engine,我试图在unity中制作一个简单的2d平板游戏。我设法移动了玩家和所有其他东西。我现在面临的问题是,随机生成到游戏中的预制件是重叠的。所以我的问题是如何防止游戏对象的重叠。我使用的预制件具有不同的尺寸(长度)。 下面是我使用的c代码: public class spawnscript : MonoBehaviour { public GameObject[] obj; public float spawnMin; public float spawnMax;

我试图在unity中制作一个简单的2d平板游戏。我设法移动了玩家和所有其他东西。我现在面临的问题是,随机生成到游戏中的预制件是重叠的。所以我的问题是如何防止游戏对象的重叠。我使用的预制件具有不同的尺寸(长度)。 下面是我使用的c代码:

    public class spawnscript : MonoBehaviour {
    public GameObject[] obj;
    public float spawnMin;
    public float spawnMax;

    // Use this for initialization
    void Start () {
        Spawn ();
    }

    void Spawn()
    {
        Instantiate (obj [Random.Range (0, obj.GetLength (0))], transform.position, Quaternion.identity);
        Invoke ("Spawn", Random.Range (spawnMin, spawnMax));
    }
}

列出现有位置=新列表();
void Spawn()
{
var pos=随机化位置();
if(HasOverlapped(existingPositions,pos))//您自己要实现的逻辑
{
//或者再次随机化该位置,或者给它一个偏移量,由您决定
}
其他的
{
实例(pos,…);
现有位置。添加(…);
}
}
列出现有位置=新列表();
void Spawn()
{
var pos=随机化位置();
if(HasOverlapped(existingPositions,pos))//您自己要实现的逻辑
{
//或者再次随机化该位置,或者给它一个偏移量,由您决定
}
其他的
{
实例(pos,…);
现有位置。添加(…);
}
}

问题在于图片中的建筑,您需要生成代码来考虑已放置的对象。不幸的是,如果没有它,将很难解释如何以一种对您有帮助的方式做到这一点。您还需要非常清楚如何放置对象,因为您的问题中缺少该细节。简单地随机选取对象本身,并将它们端到端地放置在游戏世界中,就足够了吗?或者您想要其他一些放置/冲突解决行为?请说明具体情况。问题在于图片中的建筑物,您需要生成代码来考虑已放置的对象。不幸的是,如果没有它,将很难解释如何以一种对您有帮助的方式做到这一点。您还需要非常清楚如何放置对象,因为您的问题中缺少该细节。简单地随机选取对象本身,并将它们端到端地放置在游戏世界中,就足够了吗?或者您想要其他一些放置/冲突解决行为?请具体说明。欢迎您,继续制作游戏:)欢迎您,继续制作游戏:)
List<Vector3> existingPositions = new List<Vector3>();
void Spawn()
{
    var pos = RandomizePosition();
    if(HasOverlapped(existingPositions, pos)) // Your own logic to implement
    {
         //Either randomize the position again, or give it an offset, up to you
    }
    else
    {
        Instanciate(pos, ...);
        existingPositions.Add(...);
    }
}
void Spawn() {
    Instantiate(obj [Random.Range (0, obj.GetLength (0))], transform.position +(ADD OFFSET HERE WITH PREVIOUS OBJECTS Position), Quaternion.identity);
    Invoke("Spawn", Random.Range (spawnMin, spawnMax));
}