查看: 950|回复: 2
收起左侧

[Unity 3D] Unity3D 原生WebCamera实现摄像头显示

[复制链接]
发表于 2017-2-15 12:00:37 | 显示全部楼层 |阅读模式
游戏引擎
文件风格:: -
软件版本:: 4.X
文件大小:: 0 MB

马上注册,下载海量CG资源,结交各路大神,加入CG拓扑网!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
今天为大家分享一下,如何通过WebCamera 调用外部的摄像头。
  1.首先我们需要简单认识一下,unity有关摄像头需要用到的内置类;
    WebCamDevice
       官方文档:https://docs.unity3d.com/ScriptReference/WebCamDevice.html
    WebCamTexture
       官方文档:https://docs.unity3d.com/ScriptReference/WebCamTexture.html
  2.新建一个unity3d 项目,在场景中新建Resources文件夹》Material文件夹,在文件夹中新建一个材质CameraPlane.mat;并且材质球的Shader:Unlit/Texture.
   2.png
  3.在场景中新建一个Camera,并且把对象重新命名为WebCamera,在WebCamera下面添加一个子对象Plane[PlaneMeshRender],注意点是:(1).plane的Rotation (X:90 Y:180 Z:0)如果不修改 ,显示的画面,会相反显示;(2).需要MeshRender,把第一步操作的材质球附加上。
   3_0.png
3_1.png
  4.到这一步,就是比较重点了,在WebCamera上附加一个WebCameraManager.cs 组件类,主要是处理调用外部摄像头,并且显示摄像的内容。
   4.png
    WebCameraManager.cs 代码如下:
  1. using System.Collections;[/align]using System.Collections.Generic;
  2. using UnityEngine;

  3. public class WebCameraManager : MonoBehaviour {

  4.         public string DeviceName;  
  5.         public Vector2 CameraSize;
  6.         public float CameraFPS;

  7.         //接收返回的图片数据  
  8.         WebCamTexture _webCamera;  
  9.         public GameObject Plane;//作为显示摄像头的面板


  10.         void OnGUI()
  11.         {
  12.                 if(GUI.Button(new Rect(100,100,100,100),"Initialize Camera"))
  13.                 {
  14.                         StartCoroutine ("InitCameraCor");
  15.                 }

  16.                 //添加一个按钮来控制摄像机的开和关
  17.                 if(GUI.Button(new Rect(100,250,100,100),"ON/OFF"))
  18.                 {
  19.                         if (_webCamera != null && Plane != null) {

  20.                                 if (_webCamera.isPlaying)
  21.                                         StopCamera ();
  22.                                 else
  23.                                         PlayCamera ();
  24.                         }
  25.                 }
  26.                 if(GUI.Button(new Rect(100,450,100,100),"Quit")){
  27.                         
  28.                         Application.Quit();
  29.                 }

  30.         }

  31.         public void PlayCamera()
  32.         {
  33.                 Plane.GetComponent<MeshRenderer> ().enabled = true;
  34.                 _webCamera.Play();
  35.         }


  36.         public void StopCamera()
  37.         {
  38.                 Plane.GetComponent<MeshRenderer> ().enabled =false;
  39.                 _webCamera.Stop();
  40.         }

  41.         /// <summary>  
  42.         /// 初始化摄像头
  43.         /// </summary>  
  44.         public IEnumerator InitCameraCor()  
  45.         {  
  46.                 yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);  
  47.                 if (Application.HasUserAuthorization(UserAuthorization.WebCam))  
  48.                 {  
  49.                         WebCamDevice[] devices = WebCamTexture.devices;  
  50.                         DeviceName= devices[0].name;  
  51.                         _webCamera=new WebCamTexture(DeviceName,(int)CameraSize.x,(int)CameraSize.y,(int)CameraFPS);

  52.                         Plane.GetComponent<Renderer> ().material.mainTexture=_webCamera;
  53.                         Plane.transform.localScale = new Vector3 (1,1,1);

  54.                         _webCamera.Play();  
  55.                 }  
  56.         }
  57. }
复制代码

  
  5.最后直接运行看效果哈!
5_0.png
5_1.png




上一篇:一套源码,分享给大家学习
下一篇:千年商业服务端+客服端,可直接开服
回复

举报

发表于 2017-6-29 05:11:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2017-8-28 11:42:34 | 显示全部楼层
看了这资源帖子后,我终于忍上住回帖了,
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Hottest最热帖子

Copyright   ©2011-2016  CGtop.com  Powered by©CG拓扑网  :   蜀ICP备14022215号