91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Unity如何實現全屏截圖和QQ截圖

發布時間:2020-08-03 10:43:09 來源:億速云 閱讀:279 作者:小豬 欄目:編程語言

這篇文章主要為大家展示了Unity如何實現全屏截圖和QQ截圖,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

全屏截圖:要實現的是點擊鼠標左鍵,就實現截圖,并且將所截圖片保存到本地Assets目錄下的StreamingAssets文件夾下面。

代碼如下:

using UnityEngine;
using System.Collections;

public class TakeScreenShot : MonoBehaviour {
void Update () {
//點擊鼠標左鍵
if (Input.GetMouseButtonDown (0)) {
//開啟協程方法
StartCoroutine (MyCaptureScreen ());

}
}
//我的截屏方法
IEnumerator MyCaptureScreen(){
//等待所有的攝像機和GUI被渲染完成。
yield return new WaitForEndOfFrame ();
//創建一個空紋理(圖片大小為屏幕的寬高)
Texture2D tex = new Texture2D (Screen.width,Screen.height);
//只能在幀渲染完畢之后調用(從屏幕左下角開始繪制,繪制大小為屏幕的寬高,寬高的偏移量都為0)
tex.ReadPixels (new Rect (0,0,Screen.width,Screen.height),0,0);
//圖片應用(此時圖片已經繪制完成)
tex.Apply ();
//將圖片裝換成jpg的二進制格式,保存在byte數組中(計算機是以二進制的方式存儲數據)
byte[] result = tex.EncodeToJPG ();
//文件保存,創建一個新文件,在其中寫入指定的字節數組(要寫入的文件的路徑,要寫入文件的字節。)
System.IO.File.WriteAllBytes (Application.streamingAssetsPath+"/1.JPG",result);

}
}

之后思考一下,如何像qq截圖那樣,繪制一個截屏的矩形框只截取自己想要的部分呢?

using UnityEngine;
using System.Collections;
using System.IO;//引入IO流
public class NewBehaviourScript : MonoBehaviour {
//定義一個存儲截屏圖片的路徑
string filePath;
void Start () {
//圖片存儲在StreamingAssets文件夾內。
filePath = Application.streamingAssetsPath + "/1.png";
}
Rect rect;
//截屏開始的位置
Vector3 s_pos;
//截屏結束的位置
Vector3 e_pos;
//是否繪制
bool isDraw;
void Update()
{
//按下鼠標左鍵時,記錄當前鼠標的位置為開始截屏時的位置
if(Input.GetMouseButtonDown(0))
{
s_pos = Input.mousePosition;
}
//鼠標處于按下狀態時
if(Input.GetMouseButton(0))
{
e_pos = Input.mousePosition;
//可以開始繪制
isDraw = true;
}
//抬起鼠標左鍵時,記錄當前鼠標的位置為結束截屏時的位置
if(Input.GetMouseButtonUp(0))
{
//結束繪制
isDraw = false;
e_pos = Input.mousePosition;
//獲取到截屏框起始點的位置,和寬高。
rect = new Rect(Mathf.Min(s_pos.x,e_pos.x),Mathf.Min(s_pos.y,e_pos.y),Mathf.Abs(s_pos.x-e_pos.x),Mathf.Abs(s_pos.y - e_pos.y));
//開啟繪制的協程方法
StartCoroutine(Capsture(filePath, rect));
}
}


IEnumerator Capsture(string filePath, Rect rect)
{
yield return new WaitForEndOfFrame();
//創建紋理(紋理貼圖的大小和截屏的大小相同)
Texture2D tex = new Texture2D((int)rect.width, (int)rect.height);
//讀取像素點
tex.ReadPixels(rect, 0, 0) ;
//將像素點應用到紋理上,繪制圖片
tex.Apply();
//將圖片裝換成jpg的二進制格式,保存在byte數組中(計算機是以二進制的方式存儲數據)
byte[] result =tex.EncodeToPNG();
//文件夾(如果StreamAssets文件夾不存在,在Assets文件下創建該文件夾)
if(!Directory.Exists(Application.streamingAssetsPath))
Directory.CreateDirectory(Application.streamingAssetsPath);
//將截屏圖片存儲到本地
File.WriteAllBytes(filePath, result);
}
//在這里要用GL實現繪制截屏的矩形框
//1.GL的回調函數
//2.定義一個材質Material
public Material lineMaterial;

void OnPostRender() {
if(!isDraw) return;
print (s_pos);

Vector3 sPos = Camera.main.ScreenToWorldPoint(s_pos + new Vector3(0, 0, 10));
Vector3 ePos = Camera.main.ScreenToWorldPoint(e_pos + new Vector3(0, 0, 10));

print(string.Format("GL.....{0}, {1}", sPos, ePos));
// Set your materials Done
GL.PushMatrix();
// yourMaterial.SetPass( );
lineMaterial.SetPass(0);//告訴GL使用該材質繪制
// Draw your stuff
//始終在最前面繪制
GL.invertCulling = true;
GL.Begin(GL.LINES);//開始繪制

//GL.Vertex(sPos);
//GL.Vertex(ePos);
//如果想要繪制,矩形,將下面代碼啟動
GL.Vertex(sPos);
GL.Vertex(new Vector3(ePos.x, sPos.y, 0));


GL.Vertex(new Vector3(ePos.x, sPos.y, 0));
GL.Vertex(ePos);

GL.Vertex(ePos);
GL.Vertex(new Vector3(sPos.x, ePos.y, 0));

GL.Vertex(new Vector3(sPos.x, ePos.y, 0));
GL.Vertex(sPos);
GL.End();//結束繪制

GL.PopMatrix();
}

}

在腳本組件中拖入材質球

Unity如何實現全屏截圖和QQ截圖

此圖片黑色的矩形框就是通過GL繪制出來的(通過記錄點的位置來依次繪制出線)

Unity如何實現全屏截圖和QQ截圖

以上就是關于Unity如何實現全屏截圖和QQ截圖的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

汉寿县| 景泰县| 新乡市| 互助| 本溪市| 澄迈县| 康马县| 习水县| 腾冲县| 白玉县| 平阴县| 宁安市| 桃园市| 城口县| 营口市| 吴旗县| 长兴县| 莎车县| 崇阳县| SHOW| 宁津县| 卓资县| 麻城市| 湘西| 普洱| 海城市| 高密市| 镇坪县| 崇信县| 民丰县| 泸西县| 神木县| 瓮安县| 海口市| 湘阴县| 奉化市| 呼和浩特市| 鹤庆县| 海安县| 昌平区| 琼海市|