unity 通过Texture2D刷地图行走区域 笔刷的形式代码实现
时间: 2024-01-18 17:03:48 浏览: 96
好的,针对您的问题,我可以给您提供以下的代码实现:
首先,我们需要创建一个用于编辑地图的脚本,以下是一个示例:
```csharp
using UnityEngine;
public class MapEditor : MonoBehaviour
{
public Texture2D mapTexture;
public int brushSize = 1;
public Color brushColor = Color.white;
private Color[] mapColors;
private int mapWidth;
private int mapHeight;
private void Awake()
{
mapWidth = mapTexture.width;
mapHeight = mapTexture.height;
mapColors = mapTexture.GetPixels();
}
private void Update()
{
if (Input.GetMouseButton(0))
{
Vector2 mousePosition = Input.mousePosition;
int x = (int)(mousePosition.x / Screen.width * mapWidth);
int y = (int)(mousePosition.y / Screen.height * mapHeight);
BrushMap(x, y);
}
}
private void BrushMap(int x, int y)
{
for (int i = -brushSize; i <= brushSize; i++)
{
for (int j = -brushSize; j <= brushSize; j++)
{
int px = x + i;
int py = y + j;
if (px >= 0 && px < mapWidth && py >= 0 && py < mapHeight)
{
mapColors[py * mapWidth + px] = brushColor;
}
}
}
mapTexture.SetPixels(mapColors);
mapTexture.Apply();
}
}
```
上面的代码中,我们首先获取了一个用于编辑的地图纹理,然后通过 `GetPixels()` 方法获取到了纹理中的所有像素点的颜色值。在 `Update()` 方法中,我们检测鼠标左键是否被按下,如果是的话,就获取当前鼠标的位置,计算出对应的像素点坐标,然后调用 `BrushMap()` 方法来绘制笔刷。
在 `BrushMap()` 方法中,我们首先使用两个嵌套循环来遍历笔刷的大小,然后根据当前像素点坐标以及笔刷的大小计算出需要修改的像素点坐标。注意,我们需要判断计算出来的坐标是否在地图范围内,如果在的话,就将对应的像素点颜色修改为笔刷的颜色值。最后,我们调用 `SetPixels()` 方法将修改后的颜色数组重新赋值给地图纹理,并调用 `Apply()` 方法更新纹理。
以上就是一个基本的通过 `Texture2D` 刷地图行走区域的笔刷的形式的代码实现,您可以根据实际需求进行修改和扩展。
阅读全文