Unity3D WebCamTexture 調用外部網路攝影機

來源:互聯網
上載者:User

標籤:unity3d   c#   webcamtexture   網路攝影機   拍照   

一:Unity 中使用WebCamTexture 調用網路攝影機實現拍照和攝像。

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;//接收返回的圖片資料WebCamTexture tex;public Texture2D _tex;void OnGUI(){if (GUI.Button(new Rect(10, 20, 100, 40), "開啟網路攝影機")){// 調用網路攝影機StartCoroutine(start());}if(GUI.Button(new Rect(10,70,100,40),"捕獲照片")){//捕獲照片tex.Pause();StartCoroutine(getTexture());}if(GUI.Button(new Rect(10,120,100,40),"再次捕獲")){//重新開始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-150,Screen.height/2-190,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-200,Screen.height/2-50,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>/// 連續捕獲照片/// </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-180,Screen.height/2-50,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);}}}


二:Unity 中使用WebCamTexture 設定背景為網路攝影機畫面

1在unity的情境中建立一個Quad作為背景,可以自行調節縮放和位置。

2.建立一個Material檔案夾用來存放Material,在Material裡建立一個Material材質,並命名為CamTex。3.選中CamTex材質,在Inspector面板中選擇shader的模式為Unlit/Texture。4.建立C#指令碼,並將其命名為WebCam,雙擊指令碼進行編輯,添加以下代碼:
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材質拖到Quad上6.將Quad調至攝像機正對位置。7.點擊播放按鈕即可調用網路攝影機,在quad的貼圖會顯示網路攝影機中的畫面。

Unity3D WebCamTexture 調用外部網路攝影機

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.