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);
 }
 }
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。