2012-07-30 1 views
5

Mein eigentlicher Code:Ich brauche den Weg zu bringen, um die Bilder mit einer Anwendung für Android und IOS mit UNITY Speicher

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

Ich brauche den Weg für die Ausgabe jeden Foto für diese Funktion.

Danke!

+0

Die Einheit-Tag ist für Microsoft Unity. Bitte missbrauche es nicht. –

+0

Haben Sie eine Lösung für dieses Problem gefunden? – Sona

Antwort

1

Sie können Dateien unter Application.persistentDataPath speichern. Unity-Apps haben auf Android- oder iOS-Geräten keine Schreibberechtigungen für .

Auch vergessen Sie nicht den Pfad und die Ordnernamen mit einem Schrägstrich zu verbinden:

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

Ich habe deinen Code ausprobiert. Aber es wird nicht in Application.persistentDataPath in Android gespeichert. warum passiert es so? – Sona

0

Application.persistentDataPath der Einheit zeigt immer in Richtung Dokumenten-Ordner in IOS und /mnt/android/data/application-bundle-identifier/ für android.

Und wenn Sie den Pfad für Application.CaptureScreenshot nicht geben stattdessen geben Sie nur den Namen für den Screenshot wird es automatisch im Ordner Dokumente von IOS nicht für android getestet werden.

Hoffe, das hilft.

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

Es gibt mindestens 3 ways für eine Art Screenshot mit Unity3D Sparend: Application.CaptureScreenshot, Texture2D.ReadPixels und RenderTexture.

Ich kenne nur die erste: Application.CaptureScreenshot. Es ist sicher das Einfachste. Es nimmt keine Pfade und speichert je nach Plattform Application.persistentDataPath oder Application.dataPath + "/../". Leider gibt es derzeit keine Möglichkeit, sicher oder durch Code zu wissen - es ist nur auf diese Weise gebrochen. Außerdem ist es langsam und es kann einige Sekunden dauern zu verarbeiten. Es läuft als ein separater Prozess, so dass Sie ein Update oder eine Coroutine warten müssen, bevor die Datei für irgendetwas erstellt wird.

Wenn Sie wählen möchten, wo die Datei mit der sie gespeichert wird, müssen Sie so etwas wie dies tun:

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

Aber wenn Sie es speichern möchten, damit es auf der Galerie angezeigt wird, dann haben Sie viel mehr Mühe, es zu tun. Es ist keine einfache Aufgabe: http://answers.unity3d.com/questions/204372/saving-screenshots-to-android-gallery.html – cregox

Verwandte Themen