【问题标题】:How to ensure objects are not spawned on top of one another (random spawn location)如何确保对象不会在彼此之上生成(随机生成位置)
【发布时间】:2016-06-10 21:31:27
【问题描述】:

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

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

}

【问题讨论】:

  • 创建一个对象可以生成的所有可能位置的 2d 地图,然后当对象生成时在地图上标记它,一旦对象离开屏幕,将其从地图中删除

标签: c# unity3d


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我想是的,我会试试的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 2011-02-24
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
相关资源
最近更新 更多