统一:在程序生成的地图上生成敌人

本文关键字:敌人 地图 程序生成 统一 | 更新日期: 2023-09-27 18:18:29

我已经在谷歌上搜索了一段时间,但我真的不知道该找什么,所以我要向你们这些好心人寻求帮助。

我正在为自己的第一款游戏创造程序关卡。部分代码的灵感来自这里的教程,但我尽量自己做。无论如何,这是我需要帮助的代码,它可能很难看,我将在后面解释我需要帮助的地方:

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

所以,我需要的是"Vector3 enemySpawn"选择指定参数内的贴图,但在SceneSetup函数中还没有实例化impassableObjects。一切都在生成部分工作,但我的"Tomcats"有时会在impassableObjects上生成。我尝试了几种方法来集成RandomPosition()方法,但都没有真正成功。

如果你需要更多的信息,像我的变量,让我知道!我不确定需要多少,因为我还是初学者。

任何建议都将非常感谢。

乔尔·克罗斯比.

统一:在程序生成的地图上生成敌人

最好的办法可能是维护一个List<Vector3> ImpassibleObjects,并在实例化一个新的tomcat之前对其进行检查。可能还包括一些空格。

类似以下语句的内容:

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

应该工作,祝好运!