一 :截屏代码:ParticleExporter主要思路:
1. 设置Time.captureFramerate,可以忽略真实时间, 保证截取图片的时候每帧间隔相同
2. 在当前帧界面渲染完毕之后,因为粒子特效使用的是加法着色器,所以使用黑白摄像机渲染之间的差异来创建检测Alpha(创建的时候推荐用RenderTexture.GetTemporary,unity自带的一个RenderTexture对象池),把通过黑白摄像机比较得出的像素信息存储在outputtex中,再把outputtex存储在texture2Ds数组中,
API:
Texture2D.GetPixel 获取某一坐标像素颜色,
Texture2DSetPixel 设置某一坐标像素颜色,
RenderTexture.GetTemporary 临时创建RenderTexture
RenderTexture.ReleaseTemporary 回收RenderTexture
4. 最后统一输出,一张一张输出的话会一卡一卡的,毕竟长痛不如短痛:sleepy:
5.TailoringTexture方法是的作用是裁剪边缘空白像素,后来因为每一张小图的大小要是2的n次幂,所以就没用了。思路大概就一张图片上下左右逐个像素检测,去最宽和最高,复制赋值。
二:合并大图代码:MergeSequenceFrameImage
1.确定宽和高数量:
这里遇到了点问题,如何根据小图总数量, 确定宽高分别放几张小图,纠结了挺久,还好后面因为大图尺寸和小图尺寸要定死是2的n次幂才行,所以4*4,8*8这种比较用的多,这里用的方法是取平方根,向下取整,然后另一边用总数除并向上取整(如果有好的方法希望不吝指点一下:'()
2.确定完宽高数量和宽高大小之后,开始写入大图,
获取小图w,h处的像素,并以宽高坐标(w,h)加偏移值(宽offsetW高offsetH)来确定index,依次存入colors数组
3.把colors数据设置进空白的大图nTex中,这中间遇到了个问题,正常情况下Texture2D.SetPixels是以左下角为(0,0)点开始的,但是游戏里面的序列帧动画播放工具确实以左上角为第一张图播放的。就写了个很蠢的方法SortList
SortList:把左边的数据转化为右边的数据。
求教大佬有什么好的方法
4.附上一个自己写的小工具
(1)按下空格键可以把Hierarchy面板下选中的Obj显示或者隐藏(调用了SetActive),方便换UI啊
(2)在Project面板按下空格键可以打开选中的文件夹在资源管理器里的位置。
内容肯定有很多需要优化的地方,写的不好,希望大佬多多指正。
链接:https://pan.baidu.com/s/1IVQtjsJOGGBAMlmhvCqz0w
提取码:5wu2