public static void Paint(int framePixelSize, int frameCount, MaskFramePainter maskPainter, string fileName) { int imageCols = 8; int imageRows = frameCount / imageCols; Texture2D tex = new Texture2D(imageCols * framePixelSize, imageRows * framePixelSize, TextureFormat.RGB24, false); DrawSpriteSheet(tex, frameCount, framePixelSize, imageCols, maskPainter); SaveTexture(tex, fileName); }
private static void DrawSpriteSheet( Texture2D tex, int frameCount, int framePixelSize, int frameCols, MaskFramePainter maskPainter) { float frameProgress = 1.0f / (float)frameCount; for (int i = 0; i != frameCount; ++i) { Vector2Int frameStart = new Vector2Int( framePixelSize * (i % frameCols), framePixelSize * (i / frameCols) ); float currentProgress = (float)i * frameProgress; DrawFrame(tex, frameStart, framePixelSize, maskPainter, currentProgress); } tex.Apply(); }
private static void DrawFrame(Texture2D tex, Vector2Int frameStart, int framePixelSize, MaskFramePainter maskPainter, float progress) { float onePixelRelativeToFrameSize = 1.0f / framePixelSize; for (int y = 0; y != framePixelSize; ++y) { for (int x = 0; x != framePixelSize; ++x) { Color color = maskPainter( new Vector2(x * onePixelRelativeToFrameSize, y * onePixelRelativeToFrameSize), progress ) ? Color.white : Color.black; tex.SetPixel(frameStart.x + x, frameStart.y + y, color); } } }