U3d之Application.CaptureScreenshot

U3d中的Application.CaptureScreenshot方法,是一截全屏并保存在一张图片的方法。
其实,这个方法我们实际中可能用的比较少,因为实际情况下我们截屏不单单是全屏来截的。这对这个问题我就不讨论了。有兴趣可看看我的另一篇博文:Unity3d之截图方法,文章有点老,但方法与思路是对的。

言归正传
1、它是异步的
如果你一定要在,程序中使用Application.CaptureScreenshot,且还要使用它截下的图片时,要注意:图片是在Application.CaptureScreenshot调用完成后一帧或更多久,才能被保存下来的,所以你要在Application.CaptureScreenshot调用完成后的下一要判断图片已经被保存好,才能去使用它。不然你会发现找不到图片的。

2、它保存的路径问题
在pc上可以给它传一个在Application.persistentDataPath下的全路径,
但在android和ios中只能给它传一个在Application.persistentDataPath下的相对路径。

3、版本说明
上面说的两点在目前5.6及之前的所有的版本都是正确的。

4、实现方法示例

/// 
/// 简单截屏的方法
/// 
/// 
/// 
/// 
public static IEnumerator CaptureScreenshot(string path, System.Action<bool, string> callback)
{
    // 路径处理
    // 注:path是一个在Application.persistentDataPath全路径
    // Application.persistentDataPath这个方法的参数:
    // 在pc呆传全路径
    // 在android和ios上可能传Application.persistentDataPath下的相关路径

    string newPath = path;
#if !UNITY_EDITOR
    newPath = path.Replace(Application.persistentDataPath + "/", "");
#endif
    //Debugger.Log("CaptureScreenshot path: " + path);
    //Debugger.Log("CaptureScreenshot newPath: " + newPath);
    Application.CaptureScreenshot(newPath);
    float time = Time.time;
    bool b = false;
    yield return new WaitUntil(() =>
    {
        b = System.IO.File.Exists(path);
        return b || ((Time.time - time) > 1f);
    });
    string str = path;
    if (b == false)
    {
        str = "截屏出错!";
    }
    if (callback != null)
    {
        callback(b, str);
    }
}

你可能感兴趣的:(Unity3D)