unity代码实现9*9 2d菱形tild地图,
时间: 2023-12-13 21:57:38 浏览: 29
以下是一个基本的实现:
```
using UnityEngine;
public class DiamondTileMap : MonoBehaviour
{
[SerializeField] private GameObject tilePrefab;
[SerializeField] private int mapSize = 9;
private GameObject[,] tiles;
void Start()
{
tiles = new GameObject[mapSize, mapSize];
for (int x = 0; x < mapSize; x++)
{
for (int y = 0; y < mapSize; y++)
{
float xPos = (x - (mapSize / 2)) * 1.5f;
float yPos = (y - (mapSize / 2)) * 1.5f;
if ((x + y) % 2 == 0)
{
tiles[x, y] = Instantiate(tilePrefab, new Vector3(xPos, 0f, yPos), Quaternion.identity);
}
}
}
}
}
```
在这个实现中,我们首先定义了一个 `tilePrefab` 变量,它将作为我们菱形砖块的模板。接下来,我们定义了 `mapSize` 变量,它将确定我们的菱形地图的大小。在 `Start` 方法中,我们首先创建了一个 `tiles` 数组,用于存储我们生成的所有砖块的引用。
然后,我们使用两个嵌套的 `for` 循环来遍历地图中的所有位置。对于每个位置,我们首先计算出它在世界空间中的位置。我们使用 `(x - (mapSize / 2)) * 1.5f` 来计算横坐标,` (y - (mapSize / 2)) * 1.5f` 来计算纵坐标。这个计算公式假设每个砖块的大小为 1.5,且地图的中心在世界空间的原点。
接下来,我们使用 `(x + y) % 2 == 0` 来确定当前位置是否应该生成一个砖块。这个表达式的含义是,如果 `x + y` 是偶数,那么当前位置就是一个菱形砖块的中心点。如果是奇数,则当前位置是菱形砖块的边缘,我们不需要在这个位置生成砖块。
最后,我们使用 `Instantiate` 方法来生成一个新的砖块,并将其存储在 `tiles` 数组中。我们使用 `new Vector3(xPos, 0f, yPos)` 来设置砖块的位置,使其处于正确的世界空间位置。`Quaternion.identity` 表示不对砖块进行旋转。
这样,我们就成功地生成了一个 9*9 的菱形砖块地图。您可以根据需要调整 `tilePrefab` 和 `mapSize` 变量,以创建不同大小和样式的地图。