所以我已经谷歌搜索了一段时间,但我真的不知道该找什么,所以我会请求所有好人帮忙。
我正在为第一个游戏的程序级创建者工作。部分代码的灵感来自于这里的教程,但我尝试尽可能多地自己做。无论如何,这里是我需要帮助的代码,这可能是丑陋的,并且我将解释我需要帮助的内容:
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()方法,但是还没有真正成功。
如果您需要更多信息,例如我的变量,请告诉我们!我还不确定需要多少,因为我还是初学者。
非常感谢每一条建议。
乔尔克罗斯比。答案 0 :(得分:1)
你最好的选择可能是维护一个List<Vector3> ImpassibleObjects
并在实例化一个新的tomcat之前检查它。可能也包括它周围的一些空间。
有些事情:
foreach (Vector3 impLoc in ImpassibleObjects)
{
if (randomPosition - impLoc < threshold)
{
CalculateNewRandomPositionAndRecheck();
}
}
应该工作,祝你好运!