2012-07-30 17 views
5

Mi código real:tengo que configurar la ruta para guardar las imágenes con una aplicación para Android y el IOS con Unity

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

necesito el camino para la salida de cada foto para esta función.

Gracias!

+0

La etiqueta de la unidad es la unidad para Microsoft. Por favor no lo use mal. –

+0

¿Encontró una solución para este problema? – Sona

Respuesta

1

Puede guardar archivos en Application.persistentDataPath. Las aplicaciones de Unity no tienen permisos de escritura en Application.dataPath en dispositivos Android o iOS.

Además, no se olvide de unirse a la ruta y el nombre de la carpeta con una barra inclinada:

Application.CaptureScreenshot(Application.persistentDataPath + "/Screenshot.png"); 
+1

probé tu código. Pero no guarda en Application.persistentDataPath en android. ¿Por qué sucede eso? – Sona

0

Application.persistentDataPath de unidad siempre apunta hacia la carpeta de documentos en IOS y para /mnt/android/data/application-bundle-identifier/ para android.

Y si no le da la ruta para Application.CaptureScreenshot ponga en su lugar solo el nombre de la captura de pantalla que se guardará automáticamente en la carpeta Documentos de IOS no ha probado android.

Espero que esto ayude.

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

Hay al menos 3 ways para guardar algún tipo de pantalla con Unity3D: Application.CaptureScreenshot, Texture2D.ReadPixels y RenderTexture.

Solo conozco la primera: Application.CaptureScreenshot. Es seguro el más simple. No toma caminos y se guardará en Application.persistentDataPath o Application.dataPath + "/../", dependiendo de su plataforma. Desafortunadamente, actualmente no hay forma de saberlo con certeza o solo a través del código: simplemente se ha roto de esa manera. Además, es lento y puede llevar algunos segundos procesarlo. Se ejecuta como un proceso separado, por lo que debe tener una Actualización o una Corutina esperando a que se cree el archivo antes de usarlo para nada.

Si desea elegir donde se guardará el archivo con ella, tiene que hacer algo como esto:

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; 
     } 
    } 
} 
+0

Pero si quiere guardarlo para que se muestre en la galería, entonces tendrá muchos más problemas para hacerlo. No es una tarea simple: http://answers.unity3d.com/questions/204372/saving-screenshots-to-android-gallery.html – cregox

Cuestiones relacionadas