C# 如何确保对象不会相互重叠(随机繁殖位置)

C# 如何确保对象不会相互重叠(随机繁殖位置),c#,unity3d,C#,Unity3d,我正在创造一个无休止的跳跃游戏。我已经创建了很多障碍物,以便在时间和空间上随机繁殖,但现在我想让这些障碍物与之前的障碍物不在同一个地方繁殖,因为它们正在繁殖,但有时它们可以在其他障碍物的顶部或附近繁殖,甚至在它们内部繁殖,所以请帮助我! 代码: 我认为你想要的是围绕每个障碍物的某种边界框,它代表了你想要围绕该障碍物的“填充”,在那里不能放置其他障碍物。为此,可以使用基本体碰撞器 在随机位置创建新障碍物时,可以检查其“填充物”是否与另一个障碍物的“填充物”碰撞,如果碰撞,则重新计算随机位置 我预见

我正在创造一个无休止的跳跃游戏。我已经创建了很多障碍物,以便在时间和空间上随机繁殖,但现在我想让这些障碍物与之前的障碍物不在同一个地方繁殖,因为它们正在繁殖,但有时它们可以在其他障碍物的顶部或附近繁殖,甚至在它们内部繁殖,所以请帮助我! 代码:


我认为你想要的是围绕每个障碍物的某种边界框,它代表了你想要围绕该障碍物的“填充”,在那里不能放置其他障碍物。为此,可以使用基本体碰撞器

在随机位置创建新障碍物时,可以检查其“填充物”是否与另一个障碍物的“填充物”碰撞,如果碰撞,则重新计算随机位置


我预见到的一个问题是,如果你有一个非常拥挤的空间,在找到一个有效的位置之前,这个检查可能需要重复很多次。你可能想限制它能做的检查的数量,如果它找不到一个有效的点,那么在20次左右的尝试后,它就不会生成对象。

我认为你想要的是在每个障碍物周围有一个边界框,它代表你想要在障碍物周围的“填充物”,在那里不能放置其他的填充物。为此,可以使用基本体碰撞器

在随机位置创建新障碍物时,可以检查其“填充物”是否与另一个障碍物的“填充物”碰撞,如果碰撞,则重新计算随机位置


我预见到的一个问题是,如果你有一个非常拥挤的空间,在找到一个有效的位置之前,这个检查可能需要重复很多次。您可能希望限制它可以执行的检查次数,如果它找不到有效点,则在大约20次尝试后,它不会生成对象。

创建一个包含对象可以生成的所有可能位置的二维地图,然后当对象生成时,在地图上标记它,一旦对象离开屏幕,将其从地图中删除创建一个对象可以生成的所有可能位置的二维地图,然后当对象生成时在地图上标记它,一旦对象离开屏幕,将其从地图中删除。哈,我想是的,我会尝试!是的,我想是的,我会试试的!
using UnityEngine;
using System.Collections;

public class SpawnObstacles : MonoBehaviour {
    public GameObject[] Obstacle;
    public float MINTObstacle;
    public float MAXTObstacle;
    public bool spawning = false;
    public Transform pos;
    void Update()
    { 
        if (!spawning) 
        {
            StartCoroutine("SpawnObstacle");
        }
    }
    IEnumerator SpawnObstacle()
    {
        spawning = true;
        yield return new WaitForSeconds(Random.Range(MINTObstacle, MAXTObstacle));
        Vector2 finalposition = new Vector2(Random.Range(3,7), Random.Range(pos.position.y - 6f, pos.position.y - 6f));
        Instantiate(Obstacle[Random.Range(0, Obstacle.Length)], finalposition, Quaternion.identity);
        spawning = false;
    }

}