Unityのスクリーンショットとカメラ画面によるスクリーンショットを実現します。
ゲーム開発とソフトウェア開発においては、よくスクリーンショットの機能が必要であり、UIのスクリーンショットと非UIのスクリーンショット機能が必要である。コードは以下の通りです
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class ScreenShotForCamera{
public static void CaptureScreen(string _path = null)
{
if (_path == null)
_path = "Screenshot.png";
Application.CaptureScreenshot(_path, 0);
}
public static Texture2D CaptureScreen(Rect rect, bool _isCreatePhoto = false, string _path = null)
{
// ,
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
// ,
screenShot.ReadPixels(rect, 0, 0);
screenShot.Apply();
// , png
if (_isCreatePhoto)
{
if(_path == null)
_path = Application.dataPath + "/Screenshot.png";
byte[] bytes = screenShot.EncodeToPNG();
string filename = _path;
System.IO.File.WriteAllBytes(filename, bytes);
Debug.Log(string.Format(" : {0}", filename));
}
// , Texture2d , , , 。
return screenShot;
}
//
public static Texture2D CaptureCamera(ref Camera _camera, Rect _rect, int _destX, int _destY, bool _isCreatePhoto = false, string _path = null)
{
RenderTexture renderTexture = new RenderTexture((int)_rect.width, (int)_rect.height, 24, RenderTextureFormat.ARGB32);
_camera.targetTexture = renderTexture;
_camera.Render();
// renderTexture,
RenderTexture.active = _camera.targetTexture;
Texture2D screenShot = new Texture2D((int)_rect.width, (int)_rect.height, TextureFormat.ARGB32, false);
screenShot.ReadPixels(_rect, _destX, _destY); // (_destX,_destY) _rect
screenShot.Apply();
//
//_camera.targetTexture = null;
RenderTexture.active = null;
//GameObject.Destroy(renderTexture);
// PNG
if (_isCreatePhoto)
{
if (_path == null)
_path = Application.dataPath + "/Screenshot.png";
byte[] bytes = screenShot.EncodeToPNG();
string filename = _path;
System.IO.File.WriteAllBytes(filename, bytes);
Debug.Log(string.Format(" : {0}", filename));
}
return screenShot;
}
}
小编は更にみんなのために1段を分かち合います:ユニティはスクリーンの机能を実现して、みんなに手伝うことができることを望みます。
public class ScreenShot : MonoBehaviour
{
void OnScreenShotClick()
{
//
System.DateTime now = System.DateTime.Now;
string times = now.ToString();
//
times = times.Trim();
//
times = times.Replace("/", "-");
string fileName = "ARScreenShot" + times + ".png";
//
if (Application.platform == RuntimePlatform.Android)
{
//
Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
//
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
//
texture.Apply();
//
byte[] bytes = texture.EncodeToPNG();
//
string destination = "/sdcard/DCIM/Screenshots";
//
if (!Directory.Exists(destination))
{
//
Directory.CreateDirectory(destination);
}
string pathSave = destination + "/" + fileName;
File.WriteAllBytes(pathSave, bytes);
}
}
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。