【小超_U3D】Unity截圖分享呼叫Android
阿新 • • 發佈:2019-01-08
方法一:在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裡面的分享很多 在這裡就不做介紹