有时候要重复用某一个场景的某一个角度,都过去好几步了结果总不能再把已经打乱的场景物体再移动回去吧。so~智慧的我完成了伟大的偷懒。截图保存,什么时候要看,直接上图片以假乱真棒棒哒~
当然这个功能还能用在很多地方,所以有拓展了一下鼠标自定义范围截图并保存在了文件夹下。然后就华丽丽的出现了下边这些代码。
using UnityEngine; using System.Collections; public class jietu : MonoBehaviour { int w, h; Vector3 v1, v2; void Update() { //按下鼠标拖动直至松开鼠标划定范围,截图 if (Input.GetMouseButtonDown(0)) { v1 = Input.mousePosition;//鼠标按下位置~ } if (Input.GetMouseButtonUp(0)) { v2 = Input.mousePosition; //鼠标抬起位置~ //计算鼠标划定范围的长和宽~~ w = int.Parse(Mathf.Abs(v1.x - v2.x).ToString()); h = int.Parse(Mathf.Abs(v1.y - v2.y).ToString()); StartCoroutine(GetCapture()); } } IEnumerator GetCapture() { //等待所有的摄像机跟GUI渲染完成 yield return new WaitForEndOfFrame(); Texture2D tex = new Texture2D(w, h, TextureFormat.RGB24, false); //----------------------------------------------------------------------------计算区域---------------------------------------------------- float vx = (v1.x > v2.x) ? v2.x : v1.x; //取较小的x,y作为起始点 float vy = (v1.y > v2.y) ? v2.y : v1.y; tex.ReadPixels(new Rect(vx, vy, w, h), 0, 0, true); //----------------------------------------------------------------------------------------------------------------------------------------- byte[] imagebytes = tex.EncodeToPNG();//转化为png图 tex.Compress(false);//对屏幕缓存进行压缩 System.IO.File.WriteAllBytes(Application.dataPath + "/hehe.png", imagebytes);//存储png图 } }