1. 程式人生 > >【小超_U3D】Unity截圖分享呼叫Android

【小超_U3D】Unity截圖分享呼叫Android

方法一:在unity的API中,unity給我們提供了一個現成的API  :  Application.CaptureScreenshot(imagename)。但是這個API雖然簡單,在PC、mac運用沒有多大的影響,但是如果是在移動平臺上使用的話就顯得相當的吃力,因為它會消耗我們很大的CUP,所以你在移動端使用它截圖的時候會發現很長一段的卡頓現象。但是不得不說使用起來非常的方便,但是在我們使用這個API截圖後的截圖存放在哪兒呢?很多新朋友可能不是很清楚,當然不同的平臺它的存放路徑是有差別的。下面是各個平臺的截圖存放路徑:

Application.CaptureScreenshot(screencapture.png)

            if(Application.platform==RuntimePlatform.Android || Application.platform==RuntimePlatform.IPhonePlayer)  

                 imagePath=Application.persistentDataPath;  

            else if(Application.platform==RuntimePlatform.WindowsPlayer)  

                 imagePath=Application.dataPath;  

           else if(Application.platform==RuntimePlatform.WindowsEditor)

            {  

                 imagePath=Application.dataPath;  

                 imagePath= imagePath.Replace("/Assets",null);  

             }   

            imagePath = imagePath + "/screencapture.png";

         如果你想要你的遊戲中顯示你截圖的縮圖,那麼這種方法不是一個好方法,因為你要用 WWW去載入你剛才的截圖,這會消耗你一部分的時間。    

                方法二:通過讀取螢幕快取然後轉化為Png圖片進行截圖。(當然截圖儲存路徑你可以自己設定)

   IEnumerator GetCapture()

                {

                        yield return new WaitForEndOfFrame();

                        int width = Screen.width;

                        int height = Screen.height;

                        Texture2D tex = new Texture2D(width,height,TextureFormat.RGB24,false);

                        tex.ReadPixels(new Rect(0,0,width,height),0,0,true);

                        byte[] imagebytes = tex.EncodeToPNG();//轉化為png圖

                        tex.Compress(false);//對螢幕快取進行壓縮

                        File.WriteAllBytes(Application.persistentDataPath + "/screencapture.png",imagebytes);//儲存png圖

                }

		StartCoroutine(GetCapture());

		在安卓中呼叫方法:

		void getImage(){

		//路徑名稱,通過這個路徑去取的擷取圖片的位置

		string msg=Application.persistentDataPath+ "/screencapture.png";

		using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {

		using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) {//在android裡面呼叫啟動的Activity
			jo.Call ("shareBySms", new object[] {msg});//傳值到android   可用作分享
}
}

}

android裡面的分享很多 在這裡就不做介紹