基于UNITY3D的照片墙演示项目技术分享
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;
}
}
}
}