在Unity 2D中,我使用算法实现了四边形网格迷宫的自动生成,其中我希望添加最多10个金币,使其只会生成在有三条边的角落里,我应该如何续写这段代码 private void SpawnGold() { for (int x = 1; x < cellWidth - 1; x++) { for (int y = 1; y < cellHight - 1; y++) { int wallCount = 0; if (grids[x - 1, y]) wallCount++; if (grids[x + 1, y]) wallCount++; if (grids[x, y - 1]) wallCount++; if (grids[x, y + 1]) wallCount++; if (wallCount == 3) { float randomX = Random.Range(-(canvasWidth / 2) + cellWidth / 2, canvasWidth / 2 - cellWidth / 2); float randomY = Random.Range(-(canvasWidth / 2) + cellWidth / 2, canvasWidth / 2 - cellWidth / 2); for (int i = 0; i < GoldAmount; i++) { float randomX2 = Random.Range(-canvasWidth * 0.5f, canvasWidth * 0.5f); float randomY2 = Random.Range(-canvasWidth * 0.5f, canvasWidth * 0.5f); Instantiate(Gold, new Vector2((int)randomX2 + 0.5f, (int)randomY2 + 0.5f), Quaternion.identity); } }
时间: 2023-06-18 11:02:43 浏览: 184
您可以使用一个计数器来跟踪您已经生成的金币数量,然后在符合条件的角落里生成金币,直到达到您想要的数量为止。下面是一个示例代码:
private void SpawnGold()
{
int goldCount = 0; // 计数器
while (goldCount < 10) // 最多生成10个金币
{
int x = Random.Range(1, cellWidth - 1); // 随机x坐标
int y = Random.Range(1, cellHight - 1); // 随机y坐标
int wallCount = 0;
if (grids[x - 1, y]) wallCount++;
if (grids[x + 1, y]) wallCount++;
if (grids[x, y - 1]) wallCount++;
if (grids[x, y + 1]) wallCount++;
if (wallCount == 3)
{
Instantiate(Gold, new Vector2(x - (canvasWidth / 2) + cellWidth / 2, y - (canvasHeight / 2) + cellHeight / 2), Quaternion.identity);
goldCount++; // 增加计数器
}
}
}
此代码将在迷宫中生成最多10个金币,每个金币将被放置在有三个墙壁的角落里。Instantiate()函数将在指定的位置上实例化金币。请注意,Vector2中的x和y坐标需要根据网格单元格的大小和画布的大小进行调整。
阅读全文