unity实现QQ截图功能
程序员文章站
2022-06-03 15:14:08
本文实例为大家分享了unity实现qq截图功能的具体代码,供大家参考,具体内容如下效果:代码如下:using system.collections;using system.collections.g...
本文实例为大家分享了unity实现qq截图功能的具体代码,供大家参考,具体内容如下
效果:
代码如下:
using system.collections; using system.collections.generic; using system.text.regularexpressions; using unityengine; using npinyin; using system.io; public class newbehaviourscript : monobehaviour { //截屏结束的位置 private vector3 e_pos; //是否绘制 private bool isdraw; //绘制状态 private bool statedraw; //开始绘制 private bool statedrawstart; //截屏开始的位置 private vector3 s_pos; rect rect; public material linematerial; private void update() { if (statedraw == true) { //按下鼠标左键时,记录当前鼠标的位置为开始截屏时的位置 if (input.getmousebuttondown(0)) { statedrawstart = true; s_pos = input.mouseposition; } //鼠标处于按下状态时 if (input.getmousebutton(0)) { e_pos = input.mouseposition; //可以开始绘制 isdraw = true; } //抬起鼠标左键时,记录当前鼠标的位置为结束截屏时的位置 if (input.getmousebuttonup(0) && statedrawstart == true) { //结束绘制 isdraw = false; e_pos = input.mouseposition; //获取到截屏框起始点的位置,和宽高。 rect = new rect(mathf.min(s_pos.x, e_pos.x), mathf.min(s_pos.y, e_pos.y), mathf.abs(s_pos.x - e_pos.x), mathf.abs(s_pos.y - e_pos.y)); //开启绘制的协程方法 startcoroutine(capsture(rect)); statedraw = false; statedrawstart = false; } } } /// <summary> /// 保存截图 /// </summary> /// <param name="rect"></param> /// <returns></returns> ienumerator capsture(rect rect) { yield return new waitforendofframe(); //创建纹理(纹理贴图的大小和截屏的大小相同) texture2d tex = new texture2d((int)rect.width, (int)rect.height, textureformat.rgb24, false); //读取像素点 tex.readpixels(rect, 0, 0); //将像素点应用到纹理上,绘制图片 tex.apply(); //将图片装换成jpg的二进制格式,保存在byte数组中(计算机是以二进制的方式存储数据) byte[] result = tex.encodetopng(); //文件夹(如果streamassets文件夹不存在,在assets文件下创建该文件夹) if (!directory.exists(application.streamingassetspath)) directory.createdirectory(application.streamingassetspath); //将截屏图片存储到本地 string filename = application.datapath + "/streamingassets/screenshot.png"; file.writeallbytes(filename, result); } /// <summary> /// 用gl画线 /// </summary> void onpostrender() { if (!isdraw) return; //print(s_pos); vector3 spos = camera.main.screentoworldpoint(s_pos + new vector3(0, 0, 10)); vector3 epos = camera.main.screentoworldpoint(e_pos + new vector3(0, 0, 10)); //print(string.format("gl.....{0}, {1}", spos, epos)); // set your materials done gl.pushmatrix(); // yourmaterial.setpass( ); linematerial.setpass(0);//告诉gl使用该材质绘制 // draw your stuff //始终在最前面绘制 gl.invertculling = true; gl.begin(gl.lines);//开始绘制 //gl.vertex(spos); //gl.vertex(epos); //如果想要绘制,矩形,将下面代码启动 gl.vertex(spos); gl.vertex(new vector3(epos.x, spos.y, 0)); gl.vertex(new vector3(epos.x, spos.y, 0)); gl.vertex(epos); gl.vertex(epos); gl.vertex(new vector3(spos.x, epos.y, 0)); gl.vertex(new vector3(spos.x, epos.y, 0)); gl.vertex(spos); gl.end();//结束绘制 gl.popmatrix(); } public void onbtnclick() { statedraw = true; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 火牛视频日赚150元是怎么做到的?