中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity3D截圖功能總結,并保存在指定的文件夾

發布時間:2020-04-01 18:21:59 來源:網絡 閱讀:21823 作者:速度速度撒 欄目:游戲開發

快過新年了,一直在加班趕項目,沒時間寫博客,今天上班最后一天,就休息過年了,將我強幾天在做一個截圖功能分享出來,網上查了很多,但是都是在Unity Editor下好使,能截圖,并顯示出來,但是,在Android下,截圖成功,并能顯示出來,但是就是存不到手機相冊中,找了很多原因不知道怎么回事,查閱各種資料最終解決了。我總結了一下,我用過的方法,希望大家 能夠用的上。


第一種方法:

           使用Application類下的CaptureScreenshot方法。但是我覺得這并不好用,不隨意。不能針對某一個相機(camera)的畫面,進行截圖。對局部畫面截圖,實現起來不方便,效率也低。

   using System.Windows.Forms;
   
   //截圖保存在電腦C盤中,安卓的我沒想出用這中方法截圖怎么保存到手機
   if (Input .GetMouseButtonDown (0)) {
     SaveFileDialog save = new SaveFileDialog(); 
     save.InitialDirectory = "c:\\";
      save.Filter = "Image Files(*.JPG;*.BMP;*.PNG)|*.JPG;*.BMP;*.PNG|All files (*.*)|*.*";
           DialogResult result = save.ShowDialog();
           if (result == DialogResult.OK) {
             string path = save.FileName;
      //EditorUtility.SaveFilePanel也可以實現保存,但是只能在Unity Editor下運行。
             Application.CaptureScreenshot(path);
           }
       }

   Android下, Application.CaptureScreenshot();  截圖保存在沙河中,大家可以看一看  ,講的很清楚:          http://jingpin.jikexueyuan.com/article/30470.html


第二種方法:采用的是new Texture2D來截取圖片分為截取一部分和全屏; 

//截取一塊區域,通過鼠標點擊的點來獲取要截取的區域;

using UnityEngine;  
using System.Collections;  
using System.IO;  

public class ShotScreenPicture : MonoBehaviour  
{  
  
    Texture2D p_w_picpath;  
    Texture2D cutImage;  
    WWW www;  
    Rect rect;  
    float time;  
    Vector2 pos1;  
    Vector2 pos2;  
  
    // Update is called once per frame  
    void Update()  
    {  
        //點擊鼠標左鍵,記錄第一個位置  
        if (Input.GetMouseButtonDown(0))  
        {  
            pos1 = Input.mousePosition;  
            time = Time.time;  
            if (time > 1f)  
            {  
                Debug.Log(pos1);  
            }  
        }  
        //放開左鍵記錄第二個位置  
        if (Input.GetMouseButtonUp(0))  
        {  
            pos2 = Input.mousePosition;  
            Debug.Log(pos2);  
            StartCoroutine(CutImage());  
            time = 0;  
        }  
    }  
  
    void OnGUI()  
    {  
        //當下載完成  
        if (www.isDone)  
        {  
            GUI.DrawTexture(new Rect(0, 0, 600, 904), p_w_picpath);  
        }  
  
        GUI.Button(new Rect(0, 0, 100, 50), "W" + Screen.width + "H" + Screen.height);  
  
        if (pos1 != null)  
        {  
            GUI.Button(new Rect(0, 50, 150, 50), pos1.ToString());  
        }  
        if (pos2 != null)  
        {  
            GUI.Button(new Rect(0, 100, 150, 50), pos2.ToString());  
        }  
        if (cutImage != null)  
        {  
            GUI.Button(new Rect(0, 150, 150, 50), "p_w_picpath W" + cutImage.width + "H" + cutImage.height);  
        }  
  
        if (rect != null)  
        {  
            GUI.Button(new Rect(0, 200, 250, 50), rect.ToString());  
        }  
    }  
    //截圖  
    IEnumerator CutImage()  
    {  
        //圖片大小  
        cutImage = new Texture2D((int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y), TextureFormat.RGB24, true);  
  
  
        //坐標左下角為0  
        rect = new Rect((int)pos1.x, Screen.height - (int)(Screen.height - pos2.y), (int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y));  
  
        yield return new WaitForEndOfFrame();  
        cutImage.ReadPixels(rect, 0, 0, true);   
          
        cutImage.Apply();  
        yield return cutImage;  
        byte[] byt = cutImage.EncodeToPNG();  
        //保存截圖  
        //如果是Andriod平臺,可以把Application.streamingAssetsPath換成destination = "/sdcard/DCIM/Camera";
        File.WriteAllBytes(Application.streamingAssetsPath + "/CutImage.png", byt);  
    }  
}
 //全屏截圖
 //存儲路徑
    private string Path_save;
    //讀取路徑
    private string Path_read;
    private string filepath;
    private string destination;
    void Start()
    {
        filepath = Application.persistentDataPath + "/test.txt";
    }
    public void OnClickShot()
    {
        StartCoroutine(getTexture2d());
    }
    IEnumerator getTexture2d()
    {
        //隱藏UI
       .................................
        //截圖操作
        yield return new WaitForSeconds(0.1f);
        Texture2D t = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        //顯示UI
        .......................
     
        t.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true);
        byte[] bytes = t.EncodeToPNG();
        t.Compress(true);
        t.Apply();
        img.texture = t;
        //t就是截到的圖片我們可以在這里上傳到服務器
        //下面是開始保存
        //獲取系統時間
        System.DateTime now = new System.DateTime();
        now = System.DateTime.Now;
        string filename = string.Format("p_w_picpath{0}{1}{2}{3}.png", now.Day, now.Hour, now.Minute, now.Second);
        //記錄每一個截圖名字
        StreamWriter sw;
        FileInfo ft = new FileInfo(filepath);
        la[1].text = filename;
        if (!ft.Exists)
        {
            sw = ft.CreateText();
        }
        else
        {
            sw = ft.AppendText();
        }
        sw.WriteLine(filename);
        sw.Close();
        sw.Dispose();
        //應用平臺判斷,路徑選擇
        if (Application.platform == RuntimePlatform.Android)
        {
            string origin = Path_save;
            //保存在Android相冊中,如果是PC就改成Application .dataPath 的路徑
            destination = "/sdcard/DCIM/Camera";
            if (!Directory.Exists(destination))
            {
                Directory.CreateDirectory(destination);
            }
            destination = destination + "/" + filename;
            Path_save = destination;

        }
        //保存文件
        File.WriteAllBytes(Path_save, bytes);
    }


第三種方法:有一個截圖插件,在附件即可下載;

    snapShot.CaptureAndSaveToAlbum();

    即可截圖成功,包含了選區域和全屏截圖。


【注意】第二種和第三種保存在Android下的手機相冊中,都要在發布的時候改成安卓默認路徑


Unity3D截圖功能總結,并保存在指定的文件夾

最后再給一個調安卓截圖的功能(在搜索的時候看到的,覺得挺好的,分享給大家)



http://www.360doc.com/content/16/0128/23/21062130_531360104.shtml

http://www.ceeger.com/forum/read.php?tid=15252&page=1

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑川县| 龙南县| 永吉县| 塔城市| 德惠市| 金门县| 新余市| 霍邱县| 温宿县| 麻城市| 根河市| 五台县| 兴安县| 禄劝| 乐至县| 许昌县| 余姚市| 墨竹工卡县| 池州市| 洪雅县| 江孜县| 无棣县| 望都县| 昌图县| 赣州市| 珲春市| 赞皇县| 青浦区| 奉化市| 文安县| 襄垣县| 无锡市| 北辰区| 治多县| 临武县| 阳信县| 兴隆县| 梧州市| 石门县| 龙井市| 化德县|