unity 通过new一个Texture2D并且设置Texture2D的长宽代表地图的长宽以及每个格子的大小,通过刷笔刷的颜色在Texture2D上面刷可行走区域和不可行走区域1代表可以行走,0代表不可以行走最后存入byte数组代码全部实现
时间: 2024-03-10 18:48:20 浏览: 70
好的,我来回答你的问题。以下是实现的代码:
```csharp
// 定义地图长宽和每个格子的大小
int mapWidth = 100;
int mapHeight = 100;
int cellSize = 10;
// 创建一个 Texture2D
Texture2D texture = new Texture2D(mapWidth, mapHeight);
// 定义可行走和不可行走的颜色
Color walkableColor = Color.white;
Color unwalkableColor = Color.black;
// 定义可行走和不可行走的值
byte walkableValue = 1;
byte unwalkableValue = 0;
// 初始化地图的颜色为不可行走
for (int x = 0; x < mapWidth; x++)
{
for (int y = 0; y < mapHeight; y++)
{
texture.SetPixel(x, y, unwalkableColor);
}
}
// 使用刷笔在 Texture2D 上刷可行走区域和不可行走区域
// 假设可行走区域是从 (10, 10) 到 (30, 30)
for (int x = 10; x < 30; x++)
{
for (int y = 10; y < 30; y++)
{
texture.SetPixel(x, y, walkableColor);
}
}
// 应用所有更改
texture.Apply();
// 将 Texture2D 转换为 byte 数组
byte[] mapData = new byte[mapWidth * mapHeight];
for (int x = 0; x < mapWidth; x++)
{
for (int y = 0; y < mapHeight; y++)
{
if (texture.GetPixel(x, y) == walkableColor)
{
mapData[x + y * mapWidth] = walkableValue;
}
else
{
mapData[x + y * mapWidth] = unwalkableValue;
}
}
}
```
以上代码中,我们首先创建了一个指定长宽的 Texture2D,然后将所有的像素点的颜色初始化为不可行走的颜色。接着,我们使用刷笔在 Texture2D 上刷可行走区域和不可行走区域。最后,我们将 Texture2D 转换为 byte 数组,其中可行走的像素点对应的值为可行走的值,不可行走的像素点对应的值为不可行走的值。
阅读全文