如何用unity做一个合成图片的程序
最近一直在做抗原检测,然后几个室友的图片需要合成一张然后传到大群里,每次都用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做一个合成图片的程序相关推荐
- 如果美图可以把妹,如何用技术手段做一个会拍照的程序员?
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:龙鹏,5年计算机视觉从业经验,华中科技大学本科,中国科学院硕士,原 360 图像搜 ...
- 如何用硬盘做一个家庭存储中心?
如何用硬盘做一个家庭存储中心?其实没有那么难 转载来源:http://www.sohu.com/a/258686386_100026927 写这篇文文的初衷是因为悟空问答上回答过这个题目,发现&quo ...
- 如何用Excel做一个战斗模拟器(一)升级经验表
如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 引言 确定战斗公式与怪物强度 确定人物升级经验 确定人物升级时间 确定升级所需经验 引言 作 ...
- 零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐!(DoTween动画 | WebGL视频 | 大文件上传GitHub)
零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐! 前言 一,环境搭建 1.1 安装Unity 1.2 添加WebGl模块 二,开发项目 2.1 导入插件 2.2 项目搭建 2.3 逻辑处理 ...
- 如何用Excel做一个战斗模拟器(三)战斗过程模拟
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 目录索引 定义战斗子过程 定位战斗双方基础属性 利用基础属性与战斗公式进行计算 战斗过程的运算与输出 判 ...
- android 画笔压痕效果,【自制样机教程】如何用Ps做一个压痕效果的Logo样机
原标题:[自制样机教程]如何用Ps做一个压痕效果的Logo样机 上次教你们做的自制小糖袋的 贴图样机 不知道你们玩耍的咋样 今天再给你们介绍一个logo的样机 这次的教程主要用到了图层样式 来看看怎么 ...
- Unity做一个太阳系
Unity做一个太阳系(适合初学者学习) 步骤 1.新建Unity项目(我用的unity2019) 2.在assets中建script文件夹,material文件夹. 2.创造9个sphere物体:太 ...
- 如何用css做一个爱心
摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...
- 【CSS】如何用css做一个爱心
摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...
- 如何用Excel做一个战斗模拟器(四)装备的掉落与展示
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 如何用Excel做一个战斗模拟器(三)战斗过程模拟 目录索引 定义掉落表与装备表 怪物本身掉落装备 定义 ...
最新文章
- 64位 atol c linux_C 库函数
- Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
- open-capacity-platform环境安装
- 数据库连接池技术--BoneCP
- CF-1238E. Keyboard Purchase (状压dp)
- pandas-数据分析
- 连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需
- mfc通过信号量保证线程同步
- myeclipse 8.5 注册码
- 前端:JS/25/DOM官方定义,DOM分类,HTML节点树(节点关系,节点类型,),核心DOM中公共的属性和方法(节点访问,查找DOM节点,节点属性,节点的创建,追加和删除)
- 非对称加密(1)非对称加密原理
- SQL Server中查询ORACLE的数据
- 超全面超详细的Linux学习入门系列教程
- JavaScript音频编辑
- Android 逆向之smali
- 中标麒麟系统安装达梦8 数据库
- 我们的宗旨,理念,使命和愿景
- 超大文件上传两种方案
- ByteBuffer常用方法与分析
- 华为magicbook电脑看久了眼睛累的问题
热门文章
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的clicked信号参数QAbstractButton *解决办法
- Java-图片处理 Gif转Jpg
- Android Camera动态人脸识别+人脸检测基于OpenCV(无需OpenCVManager)
- 新买的电脑,为什么浏览器(谷歌)很卡,卡到爆,浏览器很卡怎么解决?
- HTML教程笔记(菜鸟教程)
- 别花时间抠图了,赶紧试试这几个免抠图的PNG图片网站!
- 【C++】在线IDE
- 新型 EGFR 小分子抑制剂(克服 L858R/T790M 突变)
- 短信验证码接口被恶意攻击怎么办?
- 想下载B站视频却不知如何下手?一文教你爬B站!