统一:在程序生成的地图上生成敌人
本文关键字:敌人 地图 程序生成 统一 | 更新日期: 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();
}
}
应该工作,祝好运!