【问题标题】:Prevent overlapping of spawned game objects in unity防止生成的游戏对象统一重叠
【发布时间】:2015-03-06 02:59:17
【问题描述】:

我正在尝试统一制作一个简单的 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));
    }
}

【问题讨论】:

  • 问题在于图片中的建筑物
  • 您需要生成代码来考虑已放置的对象。不幸的是,如果没有a good, minimal, complete code example,将很难以对您有帮助的方式来解释如何做到这一点。您还需要非常清楚要如何放置对象,因为您的问题中缺少该细节。简单地随机选择对象本身并在您的游戏世界中端到端放置它们就足够了吗?或者你想要一些其他的放置/冲突解决行为?请具体。

标签: c# unity3d game-engine


【解决方案1】:
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));
}

【讨论】:

  • 欢迎您,继续制作游戏:)
【解决方案2】:
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(...);
    }
}

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多