2016-04-09 32 views
0

プレイヤーが死亡したときにゲームでスクリーンショットをキャプチャしました。私は、スクリーンショットをキャプチャするためのコードに従ってきました。Androidアプリケーションの画像をUnity Gameから共有

RenderTexture rt = new RenderTexture (800, 600, 24); 
    MainCamera.targetTexture = rt; 
    Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false); 
    MainCamera.Render(); 
    RenderTexture.active = rt; 
    texture.ReadPixels (new Rect (0, 0, 800, 600), 0, 0); 
    MainCamera.targetTexture = null; 
    RenderTexture.active = null; 
    Destroy (rt); 
    byte[] bytes = texture.EncodeToPNG(); 
    Directory.CreateDirectory (Application.persistentDataPath + "/GameOverScreenShot"); 
    File.WriteAllBytes (Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png", bytes); 

次のコードを使用してスクリーンショットを保存しています。

byte[] bytes = File.ReadAllBytes (Application.persistentDataPath +"/GameOverScreenShot" + "/BirdDiedScreenShot.png"); 

Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false); 
RectOffset tempOffset = new RectOffset (5, 5, 5, 5); 
texture.filterMode = FilterMode.Trilinear; 
texture.LoadImage (bytes); 
Sprite sprite = Sprite.Create (texture, new Rect (0, 0, 800, 400), new Vector2 (0.5f, 0.0f), 2.0f); 
ScreenShot_Image.GetComponent<Image>().sprite = sprite; 

ここで、このスクリーンショットをアンドロイドアプリケーションで共有します。私の研究によれば、私はそれに次のコードを持っていますが、それは空のイメージを返しています。

//instantiate the class Intent 
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); 

//instantiate the object Intent 
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); 

//call setAction setting ACTION_SEND as parameter 
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND")); 

//instantiate the class Uri 
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); 

//instantiate the object Uri with the parse of the url's file 
string destination = Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png"; 
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://"+destination); 

//call putExtra with the uri object of the file 
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); 

//set the type of file 
intentObject.Call<AndroidJavaObject>("setType", "image/*"); 

//instantiate the class UnityPlayer 
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

//instantiate the object currentActivity 
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 

//call the activity with our Intent 
currentActivity.Call("startActivity", intentObject); 

この変更は何ですか?助けてください、アドバイスありがとう

+0

は、あなたが私の答えを試してみましたか? – Programmer

+0

ええ、それでもなお1つの問題があります。私はプレーンテキストとイメージを共有できません。私はsetTypeに問題があると思う。 –

+0

あなたの投稿は画像です。あなたはそれのために別の質問を作成することができます。 – Programmer

答えて

3

takeScreenShotAndShare()に電話して、スクリーンショットを撮って共有してください。共有したい画像がありましたら、StartCoroutine(shareScreenshot(path));に電話して、画像のパス/場所を渡してください。これは、pngイメージのみをサポートしています。 JPEG、変更を共有するには

intentObject.Call<AndroidJavaObject>("setType", "image/png");

intentObject.Call<AndroidJavaObject>("setType", "image/jpeg"); 

全体コード:

void takeScreenShotAndShare() 
    { 
     StartCoroutine(takeScreenshotAndSave()); 
    } 

    private IEnumerator takeScreenshotAndSave() 
    { 
     string path = ""; 
     yield return new WaitForEndOfFrame(); 

     Texture2D screenImage = new Texture2D(Screen.width, Screen.height); 

     //Get Image from screen 
     screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); 
     screenImage.Apply(); 

     //Convert to png 
     byte[] imageBytes = screenImage.EncodeToPNG(); 


     System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/GameOverScreenShot"); 
     path = Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png"; 
     System.IO.File.WriteAllBytes(path, imageBytes); 

     StartCoroutine(shareScreenshot(path)); 
    } 

    private IEnumerator shareScreenshot(string destination) 
    { 
     string ShareSubject = "Picture Share"; 
     string shareLink = "Test Link" + "\nhttp://stackoverflow.com/questions/36512784/share-image-on-android-application-from-unity-game"; 
     string textToShare = "Text To share"; 

     Debug.Log(destination); 


     if (!Application.isEditor) 
     { 

      AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); 
      AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); 
      intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND")); 
      AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); 
      AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + destination); 

      intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); 
      intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), textToShare + shareLink); 
      intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), ShareSubject); 
      intentObject.Call<AndroidJavaObject>("setType", "image/png"); 
      AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
      AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 
      currentActivity.Call("startActivity", intentObject); 
     } 
     yield return null; 
    } 
関連する問題