ScreenCapture
6419 ワード
静的メソッドは2つしかありません
注意1、文書ではApplicationと言っています.persistentDataPathですが、win 10のunityエディタでテストしたのは、Assetsフォルダと同じレベルの2、ドキュメントの例ではファイル接尾辞をPNGファイルとして自動的に保存する必要はありませんが、テスト結果は接尾辞が必要であることです.png、そうでなければファイルタイプ3がなく、テスト発見も他のファイルタイプに指定することができます.例えばjpg 4、ドキュメントの例用のOnMouseDown()は、衝突器でクリックしてこそ有効5、free Aspectも有効であることを忘れてしまいます.この場合、画像の解像度はランダム6、superSizeよりもスクリーンショット解像度を高めることができ、ファイルサイズも7、同名のスクリーンショットファイルが上書きされます.だからルールを作って(時間をかけて名前をつけないようにしてみた)(PlayerPrefsで直接数字で名前をつけることができるかもしれません)
Application.persistentDataPath :
C:/Users/zts/AppData/LocalLow/DefaultCompany/UnityEngine API
Application.dataPath :
E:/Unity 2017 zts/UnityEngine API/Assets
注意:ファイル名が同じ場合は上書きされます(時間で名前が付けられますが、ToString()に注意)
1、得られたのはTexture 2 D 2、協程、WaitForEndOfFrame
フレーム処理では、呼び出し時に結果のスクリーンショットが影響を受けます.すべてのレンダリングスタックをキャプチャするには、フレームの終了時に呼び出す必要があります.したがって、1つのコヒーレントyield return new WaitForEndOfFrame()を使用するのは良い方法です.このメソッドを呼び出すと、フレームがまだ終了していない場合、UIなどのレンダリングワークが生成されたテクスチャに含まれない場合があります.
これは他の人のコードです.まだ試したことがありません.
ティムでCapture Framerateにも関連しており、Assetsフォルダと並んで作成されたフォルダの例があります
ScreenCapture.CaptureScreenshot
注意1、文書ではApplicationと言っています.persistentDataPathですが、win 10のunityエディタでテストしたのは、Assetsフォルダと同じレベルの2、ドキュメントの例ではファイル接尾辞をPNGファイルとして自動的に保存する必要はありませんが、テスト結果は接尾辞が必要であることです.png、そうでなければファイルタイプ3がなく、テスト発見も他のファイルタイプに指定することができます.例えばjpg 4、ドキュメントの例用のOnMouseDown()は、衝突器でクリックしてこそ有効5、free Aspectも有効であることを忘れてしまいます.この場合、画像の解像度はランダム6、superSizeよりもスクリーンショット解像度を高めることができ、ファイルサイズも7、同名のスクリーンショットファイルが上書きされます.だからルールを作って(時間をかけて名前をつけないようにしてみた)(PlayerPrefsで直接数字で名前をつけることができるかもしれません)
Application.persistentDataPath :
C:/Users/zts/AppData/LocalLow/DefaultCompany/UnityEngine API
Application.dataPath :
E:/Unity 2017 zts/UnityEngine API/Assets
//filename Application.persistentDataPath , PNG ,
//superSzie ( 1, , 2 ,1920*1080 3840*2160)
ScreenCapture.CaptureScreenshot( filename , superSize );
注意:ファイル名が同じ場合は上書きされます(時間で名前が付けられますが、ToString()に注意)
if (Input.GetMouseButtonDown (0))
{
Debug.Log ("--");
ScreenCapture.CaptureScreenshot ("some.png");
}
ScreenCapture.CaptureScreenshotAsTexture
1、得られたのはTexture 2 D 2、協程、WaitForEndOfFrame
フレーム処理では、呼び出し時に結果のスクリーンショットが影響を受けます.すべてのレンダリングスタックをキャプチャするには、フレームの終了時に呼び出す必要があります.したがって、1つのコヒーレントyield return new WaitForEndOfFrame()を使用するのは良い方法です.このメソッドを呼び出すと、フレームがまだ終了していない場合、UIなどのレンダリングワークが生成されたテクスチャに含まれない場合があります.
ScreenCapture.CaptureScreenshotAsTexture( superSize );
public class ScreenShotter : MonoBehaviour
{
IEnumerator RecordFrame()
{
yield return new WaitForEndOfFrame();
var texture = ScreenCapture.CaptureScreenshotAsTexture();
// do something with texture
// cleanup
Object.Destroy(texture);
}
public void LateUpdate()
{
StartCoroutine(RecordFrame());
}
}
カスタムパスに保存
これは他の人のコードです.まだ試したことがありません.
// Unity System.Windows.Forms.dll, Plugins
//using System.Windows.Forms; //
// playersetings--Resolution--Visible in background
public void Screenshots()
{
SaveFileDialog _SaveFileDialog = new SaveFileDialog();
_SaveFileDialog.InitialDirectory = "C:\\";
_SaveFileDialog.Filter = "Image Files(*.JPG;*.BMP;*.PNG)|*.JPG;*.BMP;*.PNG|All files (*.*)|*.*";
DialogResult result = _SaveFileDialog.ShowDialog();
UnityEngine.Screen.fullScreen = true;
if (result == DialogResult.OK)
{
string path = _SaveFileDialog.FileName;
UnityEngine.Application.CaptureScreenshot(path);
}
ティムでCapture Framerateにも関連しており、Assetsフォルダと並んで作成されたフォルダの例があります
using UnityEngine;
using System.Collections;
// Capture frames as a screenshot sequence. Images are
// stored as PNG files in a folder - these can be combined into
// a movie using image utility software (eg, QuickTime Pro).
public class CaptureTest : MonoBehaviour
{
// The folder to contain our screenshots.
// If the folder exists we will append numbers to create an empty folder.
public string folder = "ScreenshotFolder";
public int frameRate = 25;
void Start()
{
// Set the playback framerate (real time will not relate to game time after this).
Time.captureFramerate = frameRate;
// Create the folder
System.IO.Directory.CreateDirectory(folder);
}
void Update()
{
// Append filename to folder name (format is '0005 shot.png"')
string name = string.Format("{0}/{1:D04} shot.png", folder, Time.frameCount);
// Capture the screenshot to the specified file.
ScreenCapture.CaptureScreenshot(name);
}
}