团结:在程序生成的地图上产生敌人

时间:2016-11-17 13:26:11

标签: c# unity3d spawn

所以我已经谷歌搜索了一段时间,但我真的不知道该找什么,所以我会请求所有好人帮忙。

我正在为第一个游戏的程序级创建者工作。部分代码的灵感来自于这里的教程,但我尝试尽可能多地自己做。无论如何,这里是我需要帮助的代码,这可能是丑陋的,并且我将解释我需要帮助的内容:

Vector3 RandomPosition ()
{
    int randomIndex = Random.Range (0, gridPositions.Count);

    Vector3 randomPosition = gridPositions [randomIndex];

    gridPositions.RemoveAt (randomIndex);

    return randomPosition;
}


void LayoutObjectAtRandom (GameObject[] tileArray, int minimum, int maximum)
{
    int objectCount = Random.Range (minimum, maximum);

    for (int i = 0; i < objectCount; i++)
    {
        Vector3 randomPosition = RandomPosition ();

        GameObject tileChoice = tileArray [Random.Range (0, tileArray.Length)];

        Instantiate (tileChoice, randomPosition, Quaternion.identity);
    }
}

void spawnTomcats () // Figure out a way to use the RandomPosition to exclude used tiles in enemySpawn
{
    int enemyCount = (int)Mathf.Log (level, 2f);

    for (int i = 0; i < enemyCount; i++)
    {
        Vector3 enemySpawn = new Vector3 (columns + (Random.Range (0, 5)), rows - (Random.Range (7, 14)), 0f);

        GameObject tileChoice = enemyTiles [Random.Range (0, enemyTiles.Length)];

        Instantiate (tileChoice, enemySpawn, Quaternion.identity);
    }

public void SceneSetup (int level)
{
    BoardSetup ();
    InitialiseList ();
    spawnTomcats ();

    LayoutObjectAtRandom (impassableObjects, impassableCount.minimum, impassableCount.maximum);

    Instantiate (heatCat, new Vector3 (columns - 8, rows - (Random.Range(7, 14)), 0f), Quaternion.identity);
}
}

所以,我需要的是&#34; Vector3 enemySpawn&#34;选择指定参数中的图块,但在SceneSetup函数中实例化impassableObjects时尚未使用该图块。一切都在产卵部分起作用,但是我的&#34; Tomcats&#34;有时会在impassableObjects上生成。我尝试过几种方法集成RandomPosition()方法,但是还没有真正成功。

如果您需要更多信息,例如我的变量,请告诉我们!我还不确定需要多少,因为我还是初学者。

非常感谢每一条建议。

乔尔克罗斯比。

1 个答案:

答案 0 :(得分:1)

你最好的选择可能是维护一个List<Vector3> ImpassibleObjects并在实例化一个新的tomcat之前检查它。可能也包括它周围的一些空间。

有些事情:

foreach (Vector3 impLoc in ImpassibleObjects)
{
    if (randomPosition - impLoc < threshold)
    {
          CalculateNewRandomPositionAndRecheck();
    }
}

应该工作,祝你好运!