最近弄了一个小方法,就是unity中如何截屏,觉得有趣就分享一下
写一个脚本,我这里挂在摄像机上。脚本里写一个Public的方法。
using UnityEngine;
using System.Collections;
using System.IO;//注意引入
public class SavedScreen : MonoBehaviour
{
void Start()
{
}
public void DO() {
// 开启一个协程
StartCoroutine(UploadPNG());
}
// 定义一个协程
IEnumerator UploadPNG()
{
// 因为"WaitForEndOfFrame"在OnGUI之后执行
// 所以我们只在渲染完成之后才读取屏幕上的画面
yield return new WaitForEndOfFrame();
int width = Screen.width;
int height = Screen.height;
// 创建一个屏幕大小的纹理,RGB24 位格(24位格没有透明通道,32位的有)
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
// 读取屏幕内容到我们自定义的纹理图片中
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
// 保存前面对纹理的修改
tex.Apply();
// 编码纹理为PNG格式
byte[] bytes = tex.EncodeToPNG();
// 销毁没用的图片纹理
Destroy(tex);
// 将字节保存成图片,这个路径只能在PC端对图片进行读写操作
File.WriteAllBytes(Application.dataPath + "/Resources/onPcSavedScreen.png", bytes);
// 这个路径会将图片保存到手机的沙盒中,这样就可以在手机上对其进行读写操作了
File.WriteAllBytes(Application.persistentDataPath + "/onMobileSavedScreen.png", bytes);
}
}
我这里用的NGUI,做一个button出来
创建一个Resources文件夹,好了运行点击截屏就可以了