Created
March 31, 2019 00:51
-
-
Save skishida/e8528141c5dbdb5d2426cad7cf134020 to your computer and use it in GitHub Desktop.
Take Screenshot with alpha in Unity Editor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEditor; | |
using UnityEngine; | |
// mixed these codes | |
// https://qiita.com/Nekomasu/items/dcdf73f221fd64875ef0 | |
// http://entitycrisis.blogspot.com/2017/02/take-unity-screenshot-with-alpha.html | |
// Usage: | |
// 1. Attatch this script to Camera object | |
// 2. Play Game | |
// 3. Press Q in Game scene | |
// 4. Click "Shot" Button on left upper corner | |
public class SimpleScreenshot : MonoBehaviour | |
{ | |
//ファイル名の指定 | |
[SerializeField,Tooltip("ファイル名の末尾に付く文字")] | |
private string _imageTitle = "img"; | |
//保存先の指定 (末尾に / を付けてください) | |
[SerializeField,Tooltip("ファイルの保存先 末尾の/ を含めてください")] | |
private string _imagePath = "Assets/ScreenShots/"; | |
//タイムスタンプの形式 | |
[SerializeField] | |
private int _timeStampType = 0; | |
//撮影ボタンの表示切替 | |
[SerializeField,Tooltip("trueならGUIの撮影ボタンを表示します")] | |
private bool _shotButtonActive = false; | |
void Update() | |
{ | |
//「Q」でボタンの表示切替 | |
if (Input.GetKeyDown(KeyCode.Q)) | |
{ | |
_shotButtonActive = !_shotButtonActive; | |
} | |
//「P」で撮影 | |
if (Input.GetKeyDown(KeyCode.P)) | |
{ | |
StartCoroutine(imageShooting(_imagePath,_imageTitle)); | |
} | |
} | |
//撮影ボタン設定 | |
void OnGUI() | |
{ | |
if (_shotButtonActive == false) { return; } | |
if (GUI.Button(new Rect(10, 10, 40, 20), "Shot")) | |
{ | |
StartCoroutine(imageShooting(_imagePath,_imageTitle)); | |
} | |
} | |
//撮影処理 | |
//第一引数 ファイルパス / 第二引数 タイトル | |
private IEnumerator imageShooting(string path, string title) | |
{ | |
imagePathCheck(path); | |
string name = getTimeStamp() + title + ".png"; | |
//ScreenCapture.CaptureScreenshot(path + name); | |
var camera = GetComponent<Camera>(); | |
int w = camera.pixelWidth; | |
int h = camera.pixelHeight; | |
var rt = new RenderTexture(w, h, 32); | |
camera.targetTexture = rt; | |
var screenShot = new Texture2D(w, h, TextureFormat.ARGB32, false); | |
camera.Render(); | |
RenderTexture.active = rt; | |
screenShot.ReadPixels(new Rect(0, 0, w, h), 0, 0); | |
screenShot.Apply(); | |
camera.targetTexture = null; | |
RenderTexture.active = null; | |
DestroyImmediate(rt); | |
File.WriteAllBytes(Path.Combine(path, name), screenShot.EncodeToPNG()); | |
Debug.Log("Title: " + name); | |
Debug.Log("Directory: " + path); | |
AssetDatabase.Refresh(); | |
yield break; | |
} | |
//ファイルパスの確認 | |
private void imagePathCheck(string path) | |
{ | |
if (Directory.Exists(path)) | |
{ | |
Debug.Log("The path exists"); | |
} | |
else | |
{ | |
//パスが存在しなければフォルダを作成 | |
Directory.CreateDirectory(path); | |
Debug.Log("CreateFolder: " + path); | |
} | |
} | |
//タイムスタンプ | |
private string getTimeStamp() | |
{ | |
string time; | |
//タイムスタンプの設定書き足せます | |
// 0 数字の連番 / 20180101125959 | |
// 1 数字の連番(年無し) / 0101125959 | |
// 2 年月日付き / 2018年01月01日12時59分59秒 | |
// 3 年月日付き(年無し) / 01月01日12時59分59秒 | |
switch (_timeStampType) | |
{ | |
case 0: | |
time = DateTime.Now.ToString("yyyyMMddHHmmss"); | |
return time; | |
break; | |
case 1: | |
time = DateTime.Now.ToString("MMddHHmmss"); | |
return time; | |
break; | |
case 2: | |
time = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒"); | |
return time; | |
break; | |
case 3: | |
time = DateTime.Now.ToString("MM月dd日HH時mm分ss秒"); | |
return time; | |
break; | |
default: | |
time = DateTime.Now.ToString("yyyyMMddHHmmss"); | |
return time; | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment