unity实现游戏界面截图
Posted 头号理想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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爱好者 欢迎关注我的博客
我会在这里持续更新我的学习过程
祝大家头发浓密 睡眠良好 财富自由
我是一名爱健身的准程序员
以上是关于unity实现游戏界面截图的主要内容,如果未能解决你的问题,请参考以下文章