I need to set the path for saving the pictures wit

2019-02-17 17:53发布

My actual code:

function Update() { 
    if(Input.GetMouseButtonDown(0)) {
       Debug.Log("foto");
       Application.CaptureScreenshot(Application.dataPath + "Screenshot.png");
    }
}

I need the path for the output of every photo for this function.

Thanks!

4条回答
孤傲高冷的网名
2楼-- · 2019-02-17 18:07

Application.persistentDataPath of unity always points towards documents folder in IOS and to /mnt/android/data/application-bundle-identifier/ for android.

And if you don't give the path for Application.CaptureScreenshot put instead give only the name for the screenshot it'll automatically get saved in the Documents folder of IOS haven't tested for android.

Hope this helps.

查看更多
再贱就再见
3楼-- · 2019-02-17 18:08
static function CaptureScreen(){
var filename;
var name :String = GuiScript.stringToEdit;
var allowedScreenshots:int=1000;
for(var i = 0; i <= allowedScreenshots; i++)
    {

        if(Application.platform == RuntimePlatform.Android){
            filename = "/mnt/sdcard/Android/data/com.xxxx.Test01/files/" + name + i + ".png";
        } else {            
            filename =  name + i + ".png";
        }
        if(!System.IO.File.Exists(filename))
        {
            Application.CaptureScreenshot(name + i + ".png" );
            print("ScreenDUMP made!");
            print(i);
            print(name);

            return;
        }
        else
        {
            print("filename already exists");
            print(i);
        }
    }
}
查看更多
叼着烟拽天下
4楼-- · 2019-02-17 18:12

You can save files to Application.persistentDataPath. Unity apps do not have write permissions to Application.dataPath on Android or iOS devices.

Also, don't forget to join the path and the folder name with a forward slash:

Application.CaptureScreenshot(Application.persistentDataPath + "/Screenshot.png");
查看更多
迷人小祖宗
5楼-- · 2019-02-17 18:20

There are at least 3 ways for saving some kind of screenshot with Unity3D: Application.CaptureScreenshot, Texture2D.ReadPixels and RenderTexture.

I only know about the first one: Application.CaptureScreenshot. It is for sure the simplest one. It doesn't take paths and it will save to Application.persistentDataPath or Application.dataPath + "/../", depending on your platform. Unfortunately there's currently no way of knowing for sure or through code only - it's just broken in that way. Also, it is slow and it may take some seconds to process. It runs as a separate process so you should have an Update or a Coroutine waiting for the file to be created before using it for anything.

If you want to choose where the file will be saved with it, you need to do something like this:

bool creatingFile = false;
string fileName = "Screenshot.png"
function Update() { 
    if(Input.GetMouseButtonDown(0)) {
        Application.CaptureScreenshot(fileName);
        creatingFile = true;
    }
    if (creatingFile) {
        string origin = System.IO.Path.Combine(Application.persistentDataPath, fileName);
        string destination = "/sdcard/ScreenCapture/" + fileName; // could be anything
        if (System.IO.File.Exists(origin)) {
            System.IO.File.Move(origin, destination);
            creatingFile = false;
        }
    }
}
查看更多
登录 后发表回答