unity实现超大图片墙演示,由于拥有海量图片,使用了CPU 多线程,unity dots技术,图片组成文字部分,使用了点阵图技术,提取文字像素。
(关于点阵介绍)
点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓。点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示。
可私信联系
unity dots 图片墙,大量图片组成文字,点阵字体实现
核心(文字组成图片)
点阵图核心代码
void RenderImageAsPixels()
{
// 获取图片的宽度和高度
int width = imageTexture.width;
int height = imageTexture.height;
// 获取图片的所有像素Color[] pixels = imageTexture.GetPixels();// 创建一个父物体来容纳所有的像素点GameObject pixelParent = gameObject;// pixelParent.transform.SetParent(transform, false);var textures_Length = textures.Length;// 遍历每个像素int count = 0;// List<RectTransform[]> rectTransforms = new List<RectTransform[]>();for (int y = 0; y < height; y+= jumpStep){// rectTransforms.Add(new RectTransform[width]);for (int x = 0; x < width; x += jumpStep){// 获取当前像素的颜色Color pixelColor = pixels[y * width + x];// 如果是黑色像素(可以根据需要调整颜色条件)if (pixelColor == Color.black){// 创建一个像素点并设置其位置和尺寸RawImage pixelImage = Instantiate(pixelPrefab, pixelParent.transform);RectTransform rectTransform = pixelImage.GetComponent<RectTransform>();pixelImage.texture = textures[Random.Range(0, textures_Length)];// 设置像素点的位置,考虑到间隔float posX = x * (pixelSize + spacing);float posY = y * (pixelSize + spacing);rectTransform.anchoredPosition = new Vector2(posX, posY)+ offset;rectTransform.sizeDelta = new Vector2(pixelSize, pixelSize);rectTransform.anchoredPosition *= size;var d= Random.Range(textrue_size.x, textrue_size.y);rectTransform.sizeDelta =new Vector2(d,d);StartCoroutine(move_image2(rectTransform, count));count++;// rectTransforms[0][0] = rectTransform;}}}
}