Unity3D WebCamTexture 調(diào)用外部攝像頭
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-05-05 07:54:12 閱讀次數(shù):10367次
1:Unity 中使用WebCamTexture 調(diào)用攝像頭實(shí)現(xiàn)拍照和攝像。
using UnityEngine;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime .Serialization.Formatters.Binary;
using System.Threading;
public class takePhoto : MonoBehaviour
{
public string deviceName;
//接收返回的圖片數(shù)據(jù)
WebCamTexture tex;
public Texture2D _tex;
void OnGUI()
{
if (GUI.Button(new Rect(10, 20, 100, 40), "開(kāi)啟攝像頭"))
{
// 調(diào)用攝像頭
StartCoroutine(start());
}
if(GUI.Button(new Rect(10,70,100,40),"捕獲照片"))
{
//捕獲照片
tex.Pause();
StartCoroutine(getTexture());
}
if(GUI.Button(new Rect(10,120,100,40),"再次捕獲"))
{
//重新開(kāi)始
tex.Play();
}
if(GUI.Button(new Rect(120,20,80,40),"錄相"))
{
//錄相
StartCoroutine(SeriousPhotoes());
}
if(GUI.Button(new Rect(10,170,100,40),"停止"))
{
//停止捕獲鏡頭
tex.Stop ();
StopAllCoroutines();
}
if(tex!=null)
{
// 捕獲截圖大小 ―距X左屏距離 | 距Y上屏距離
GUI.DrawTexture(new Rect(Screen.width/2⑴50,Screen.height/2⑴90,280,200),tex);
}
}
/// <summary>
/// 捕獲窗口位置
/// </summary>
public IEnumerator start()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
deviceName= devices[0].name;
tex=new WebCamTexture(deviceName,300,300,12);
tex.Play();
}
}
/// <summary>
/// 獲得截圖
/// </summary>
/// <returns>The texture.</returns>
public IEnumerator getTexture()
{
yield return new WaitForEndOfFrame();
Texture2D t=new Texture2D(400,300);
t.ReadPixels( new Rect(Screen.width/2⑵00,Screen.height/2⑸0,360,300),0,0,false);
//距X左的距離 距Y屏上的距離
// t.ReadPixels(new Rect(220, 180, 200, 180), 0, 0, false);
t.Apply();
byte[] byt=t.EncodeToPNG();
// File.WriteAllBytes(Application.dataPath+"/Photoes/"+Time.time+".jpg",byt);
tex.Play();
}
/// <summary>
/// 連續(xù)捕獲照片
/// </summary>
/// <returns>The photoes.</returns>
public IEnumerator SeriousPhotoes()
{
while (true)
{
yield return new WaitForEndOfFrame();
Texture2D t = new Texture2D(400, 300, TextureFormat.RGB24, true);
t.ReadPixels(new Rect(Screen.width/2⑴80,Screen.height/2⑸0,360,300), 0, 0, false);
t.Apply();
print(t);
byte[] byt = t.EncodeToPNG();
// File.WriteAllBytes(Application.dataPath + "/MulPhotoes/" + Time.time.ToString().Split('.')[0] + "_" + Time.time.ToString().Split('.')[1] + ".png", byt);
Thread.Sleep(300);
}
}
}
2:Unity 中使用WebCamTexture 設(shè)置背景為攝像頭畫(huà)面
1在unity的場(chǎng)景中新建1個(gè)Quad作為背景,可以自行調(diào)理縮放和位置。
2.新建1個(gè)Material文件夾用來(lái)寄存Material,在Material里新建1個(gè)Material材質(zhì),并命名為CamTex。
3.選中CamTex材質(zhì),在Inspector面板當(dāng)選擇shader的模式為Unlit/Texture。
4.新建C#腳本,并將其命名為WebCam,雙擊腳本進(jìn)行編輯,添加以下代碼:
using UnityEngine;
using System.Collections;
public class WebCam : MonoBehaviour {
public string deviceName;
WebCamTexture tex;
// Use this for initialization
IEnumerator Start () {
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if(Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
deviceName = devices[0].name;
tex = new WebCamTexture(deviceName, 400, 300, 12);
renderer.material.mainTexture = tex;
tex.Play();
}
}
}
5.將CamWeb腳本和CamTex材質(zhì)拖到Quad上
6.將Quad調(diào)至攝像機(jī)正對(duì)位置。
7.點(diǎn)擊播放按鈕便可調(diào)用攝像頭,在quad的貼圖會(huì)顯示攝像頭中的畫(huà)面。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)