我有一个脚本,它使用鼠标点的光线投射来绘制材质中的遮罩,以去除游戏中物品上的污垢,它在编辑器中运行良好,但在我构建之后它不起作用
if (Input.GetMouseButton(0))
{
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit raycastHit))
{
Vector2 textureCoord = raycastHit.textureCoord;
int pixelX = (int)(textureCoord.x * dirtMaskTexture.width);
int pixelY = (int)(textureCoord.y * dirtMaskTexture.height);
Vector2Int paintPixelPosition = new Vector2Int(pixelX, pixelY);
//Debug.Log("UV: " + textureCoord + "; Pixels: " + paintPixelPosition);
int paintPixelDistance = Mathf.Abs(paintPixelPosition.x - lastPaintPixelPosition.x) + Mathf.Abs(paintPixelPosition.y - lastPaintPixelPosition.y);
int maxPaintDistance = 7;
if (paintPixelDistance < maxPaintDistance)
{
// Painting too close to last position
return;
}
lastPaintPixelPosition = paintPixelPosition;
int pixelXOffset = pixelX - (dirtBrush.width / 2);
int pixelYOffset = pixelY - (dirtBrush.height / 2);
for (int x = 0; x < dirtBrush.width; x++)
{
for (int y = 0; y < dirtBrush.height; y++)
{
Color pixelDirt = dirtBrush.GetPixel(x, y);
Color pixelDirtMask = dirtMaskTexture.GetPixel(pixelXOffset + x, pixelYOffset + y);
float removedAmount = pixelDirtMask.g - (pixelDirtMask.g * pixelDirt.g);
dirtMaskTexture.SetPixel(
pixelXOffset + x,
pixelYOffset + y,
new Color(0, pixelDirtMask.g * pixelDirt.g, 0)
);
}
}
dirtMaskTexture.Apply();
}