当前位置: 首页 > article >正文

基于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;


            }
        }
    }
}

http://www.kler.cn/a/448055.html

相关文章:

  • 一道Delphi的面试题
  • 如何在window 使用 conda 环境下载大模型
  • 飞牛 fnos 使用docker部署 bili-sync:打造自动化 B 站资源下载器,与主流媒体服务器无缝衔接
  • nodejs利用子进程child_process执行命令及child.stdout输出数据
  • 多目标优化常用方法:pareto最优解
  • SQL 插入数据详解
  • Apache解析漏洞(apache_parsingCVE-2017-15715)
  • 【卡尔曼滤波理论推导与实践】【理论】【3.2/5 卡尔曼增益02】
  • 广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
  • 虚拟现实喷漆训练解决方案,为喷漆行业提供全新高效的培训方式
  • Nginx中Server块配置的详细解析
  • 游戏引擎学习第54天
  • python学习——sort/sorted+lambda表达式实现多级排序
  • linux mysql 8 大小写敏感问题
  • Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习
  • MySQL 在window免安装启动
  • GVRP自动创建及其注销(eNSP)
  • 1688跨境代购代采业务:利用API实现自动化信息化
  • Android-帧布局FrameLayout
  • cmd初使用windows-docker时的一些小小问题
  • K8S日志采集与监控方案介绍
  • 如何用发链框架,快速构建一条区块链?
  • Scratch游戏推荐 | 8球台球——体验真实台球对战乐趣! ✨
  • 【085】基于51单片机PID直流电机控制系统【Proteus仿真+Keil程序+报告+原理图】
  • Java实现贪吃蛇游戏
  • tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录