ScreenCapture


静的メソッドは2つしかありません

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);
    }
}