unity实现游戏界面截图

在很多手游中我们可能会留意到 当我们闯关成功或者失败的时候
游戏自动给我们截一个图 然后提示我们可以分享朋友圈等等

我经过各方查找资料等
终于可以实现这个效果了 因为中间有很多我们没有深刻接触过的类
所以代码的意思还是没有全部明白

下面开始实现
我们的思路是在文件夹中创建一个图片
然后每次截图之后 更新这个图片的内容 之后再合适的时机我们可以用UGUI来表达出来
比如失败或者成功的时候

void Update()
 {
  if (Input.GetKeyDown(KeyCode.KeypadEnter ))//检测按下回车截图
  {
   Camera camera = GameObject.Find("Main Camera").gameObject.GetComponent<Camera>();
   int ratio = 2;
   Rect rect = new Rect(0, 0, (int)Screen.width / ratio, (int)Screen.height / ratio);//图片大小取决于ratio的大小
   Texture2D aa = ScreenShot(camera, rect);
  }
 }
 public Texture2D ScreenShot(Camera camera, Rect rect)
 {
  RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
  camera.targetTexture = rt;
  camera.Render();
  RenderTexture.active = rt;
  Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
  //颜色纹理格式,每个通道8位。
  screenShot.ReadPixels(rect, 0, 0);//从屏幕读取像素到保存的纹理数据中。
  screenShot.Apply();//实际上应用所有以前的SetPixel和SetPixels更改。
  camera.targetTexture = null;
  RenderTexture.active = null;
  GameObject.Destroy(rt);
  byte[] bytes = screenShot.EncodeToPNG();//设置文件类型
  string filename = Application.dataPath + "/Resources/ScreenShot/screenshot.png";//存放路径
  System.IO.File.WriteAllBytes(filename, bytes);//根据上边的类型以及路径写入文件夹中去
#if UNITY_EDITOR
  UnityEditor.AssetDatabase.Refresh();//刷新,这步很关键,否则后面调用图片时没有。
#endif
  
  return screenShot;
 }

上边是代码 做项目的时候完全就可以把这个功能加上去
脚本自动寻找摄像机 文件夹等

注意 我们创建一个路径/Resources/ScreenShot/screenshot.png"
不然不会报错 而且也不会有效果

可以吧这个图片的类型改成sprite(2d and UI)然后就可以给Image赋值了
之后我会更新里边的知识 比如RenderTexture 类等等

如果你也是unity爱好者 欢迎关注我的博客
我会在这里持续更新我的学习过程
祝大家头发浓密 睡眠良好 财富自由
我是一名爱健身的准程序员

发布了88 篇原创文章 · 获赞 101 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/105709716