最近一直在做抗原检测,然后几个室友的图片需要合成一张然后传到大群里,每次都用ps来处理感觉一直在做重复动作,有点麻烦,于是就想能不能用我所学的知识来优化这个过程,减少重复劳动呢。
答案是肯定的,好歹也干了这么多年的客户端,这么点需求都不能实现,那岂不是白拿那么多年工资了。

首先呢,我先理了一下需求,也就是需求分析嘛:
1、首先是发布平台,我习惯用pc,所以目标是发布一个可执行文件(exe)。
2、点击某个按钮,需要弹出一个选择文件框,需要支持单选和多选,限定png和jpg格式。
3、选择的文件需要被显示在预览区,这里需要加载本地图片的逻辑。
4、需要将几张图片合成为一张,且加上文字,因为需要显示我们的门牌号嘛,这里我初步的方案是截图。
5、将生成的图片保存到本地,这里有需要一个选择文件框来选择目标路径。
6、保存ok后,需要弹出目标文件夹,并且自动选中保存好的图片。

需求分析列完后,照着上面这个表开发,就是按部就班的事情啦。

那就开始吧:
1、将Game视图的分辨率调整为1920*1080。
2、搭建界面如下:

3、节点层次图

4、节点搭建好了之后就开始写逻辑代码。

代码思路如下:
1、通过文件选择框获得图片路径功能:Unity调用系统窗口选择框
2、将拿到的路径存在列表中,然后根据列表重新刷新预览区的图片列表:

3、刷新逻辑就是1)先销毁已经加载的资源,2)然后调用unity提供的未使用资源卸载接口,3)之后重新加载资源计算布局。划红线部分为卸载资源和加载资源的接口。

加载图片的接口,逻辑比较直白,加载文件,读取字节,释放文件句柄,生成Texture2D对象,用Texture2D对象生成Sprite对象,因为我用的是Image而不是RawImage所以需要Sprite对象。
这里既然New了资源类型的对象,就要考虑在合适的地方去Destroy这个对象。

4、截图功能,需要注意的点是截图只能在相机渲染完场景后才能使用,所以我们需要注册一个回调到相机渲染完的时间点,因为我用的URP工程,并非默认的工程,所以注册回调的地方用到了RenderPipelineManager,如果是默认工程,用Camera.onPostRender即可。
这里savePath是在用户点击生成按钮时保存下来的,用过就会清空,避免反复执行回调。
截图的过程是1)计算需要截图的位置大小信息,为一个Rect对象,2)调用截图接口截图,3)将Texture2D对象写入文件,4)调用系统API打开文件管理器,并选中生成的图片。

截图功能如下:

5、因为截图功能是在渲染完毕后的回调里执行的,所以用户点击生成按钮时,其实只存下了保存路径。

6、逻辑功能写完后,就是在按钮上绑定接口,将脚本挂上节点,并拖好引用。




至此,制作流程就结束了,过程中,我的文本节点用到了TMP ,实际上Text也可以,不过看unity2021中已经将Text归为Lagacy,猜测以后的趋势就是TMP替代Text,毕竟TMP的功能比unity自己的Text强大多了。

这里把工程放出来,给有需要的同学:仓库地址

如何用unity做一个合成图片的程序相关推荐

  1. 如果美图可以把妹,如何用技术手段做一个会拍照的程序员?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:龙鹏,5年计算机视觉从业经验,华中科技大学本科,中国科学院硕士,原 360 图像搜 ...

  2. 如何用硬盘做一个家庭存储中心?

    如何用硬盘做一个家庭存储中心?其实没有那么难 转载来源:http://www.sohu.com/a/258686386_100026927 写这篇文文的初衷是因为悟空问答上回答过这个题目,发现&quo ...

  3. 如何用Excel做一个战斗模拟器(一)升级经验表

    如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 引言 确定战斗公式与怪物强度 确定人物升级经验 确定人物升级时间 确定升级所需经验 引言 作 ...

  4. 零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐!(DoTween动画 | WebGL视频 | 大文件上传GitHub)

    零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐! 前言 一,环境搭建 1.1 安装Unity 1.2 添加WebGl模块 二,开发项目 2.1 导入插件 2.2 项目搭建 2.3 逻辑处理 ...

  5. 如何用Excel做一个战斗模拟器(三)战斗过程模拟

    如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 目录索引 定义战斗子过程 定位战斗双方基础属性 利用基础属性与战斗公式进行计算 战斗过程的运算与输出 判 ...

  6. android 画笔压痕效果,【自制样机教程】如何用Ps做一个压痕效果的Logo样机

    原标题:[自制样机教程]如何用Ps做一个压痕效果的Logo样机 上次教你们做的自制小糖袋的 贴图样机 不知道你们玩耍的咋样 今天再给你们介绍一个logo的样机 这次的教程主要用到了图层样式 来看看怎么 ...

  7. Unity做一个太阳系

    Unity做一个太阳系(适合初学者学习) 步骤 1.新建Unity项目(我用的unity2019) 2.在assets中建script文件夹,material文件夹. 2.创造9个sphere物体:太 ...

  8. 如何用css做一个爱心

    摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...

  9. 【CSS】如何用css做一个爱心

    摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...

  10. 如何用Excel做一个战斗模拟器(四)装备的掉落与展示

    如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 定义掉落表与装备表 怪物本身掉落装备 定义 ...

最新文章

  1. 64位 atol c linux_C 库函数
  2. Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
  3. open-capacity-platform环境安装
  4. 数据库连接池技术--BoneCP
  5. CF-1238E. Keyboard Purchase (状压dp)
  6. pandas-数据分析
  7. 连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需
  8. mfc通过信号量保证线程同步
  9. myeclipse 8.5 注册码
  10. 前端:JS/25/DOM官方定义,DOM分类,HTML节点树(节点关系,节点类型,),核心DOM中公共的属性和方法(节点访问,查找DOM节点,节点属性,节点的创建,追加和删除)
  11. 非对称加密(1)非对称加密原理
  12. SQL Server中查询ORACLE的数据
  13. 超全面超详细的Linux学习入门系列教程
  14. JavaScript音频编辑
  15. Android 逆向之smali
  16. 中标麒麟系统安装达梦8 数据库
  17. 我们的宗旨,理念,使命和愿景
  18. 超大文件上传两种方案
  19. ByteBuffer常用方法与分析
  20. 华为magicbook电脑看久了眼睛累的问题

热门文章

  1. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的clicked信号参数QAbstractButton *解决办法
  2. Java-图片处理 Gif转Jpg
  3. Android Camera动态人脸识别+人脸检测基于OpenCV(无需OpenCVManager)
  4. 新买的电脑,为什么浏览器(谷歌)很卡,卡到爆,浏览器很卡怎么解决?
  5. HTML教程笔记(菜鸟教程)
  6. 别花时间抠图了,赶紧试试这几个免抠图的PNG图片网站!
  7. 【C++】在线IDE
  8. 新型 EGFR 小分子抑制剂(克服 L858R/T790M 突变)
  9. 短信验证码接口被恶意攻击怎么办?
  10. 想下载B站视频却不知如何下手?一文教你爬B站!