如何确保对象不会彼此重叠(随机生成的位置)

时间:2016-05-17 12:04:57

标签: c# unity3d

我正在创造一个无尽的跳跃游戏。我已经为时间和空间随机产生了很多障碍,但是现在我想让障碍产生的不是与前一个相同的地方,因为它们产卵但有时它们会产生在另一个的顶部。或靠近其他人甚至在他们内部,所以请帮助我! 代码:

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;
    }

}

1 个答案:

答案 0 :(得分:0)

我认为你想要的是每个障碍物周围的某种边界框,代表你想要围绕那个障碍物的“填充物”,其中没有其他障碍物可以放置。您可以为此目的使用原始对撞机。

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

我预见的一个问题是,如果你的空间非常拥挤,那么在找到有效位置之前,可能需要多次重复检查。您可能希望限制它可以执行的检查次数,如果它没有找到有效的点,它就不会在20次左右后产生该对象。