Unity如何调用摄像头并显示在窗口内

  • 序言
  • 目标
    • unity中的实现

序言

在学习Unity开发AR过程中,发现无论是Vuforia还是Unity中的ARkit或者ARcore,均是建立一个ARcamera,而这个camera是受他们AR内核支配的,并不是最原始的可控摄像头,所以萌生了想要做一个受自己控制的摄像头。实现这个愿望的第一步就是将摄像头的视频内容接入到Unity中,这篇文章就是讲的这个内容。

目标

  1. Unity可以打开摄像头并在窗口中显示
  2. 如果有多个摄像头,则可以通过按钮进行切换

unity中的实现

  1. 首先创建一个3D项目

  2. 在Hierarchy中创建一个Canvas(画布),在Game窗口中可以设定Canvas大小,目标设定为(1280*820)。

  3. 画布中创建以下子项目
    RawImage(Raw Image)->用于显示摄像头的内容,大小为1280*720,并将RawImage与Canvas上边缘对齐。
    CameraOnButton (button)->用于开启和关闭摄像头,点击第一次时是打开,点击第二次时为关闭。
    CameraSwitchButton (button)->用于切换摄像头。
    BG_Im(Image)->用于放在Canvas底部作为UI的背景使用,颜色调成深灰色。
    创建好后如下所示:

  4. 创建一个空对象(Empty Object),取名为CameraController, 在CameraController下创建新脚本取名“CameraContrller”,脚本内容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class CameraContrller : MonoBehaviour
{int currentCamIndex = 0;WebCamTexture tex;public RawImage display;public Text startStopText;public void SwapCam_Clicked(){if (WebCamTexture.devices.Length > 0 )//WebCamTexture.devices.Length表示接入电脑的摄像机数量,当摄像机数量大于0时,运行下面切换操作。{currentCamIndex += 1;currentCamIndex %= WebCamTexture.devices.Length;//这行代码很有学习价值,它的意思是说设定一个数,计数器未达到这个数时,可以增加,当计数器达到这个数时会被重置为0}}public void StartStopCam_Clicked(){if(tex != null)//stop camera{StopWebCam();startStopText.text = "Start Camera";}else//start camera{WebCamDevice device = WebCamTexture.devices[currentCamIndex];tex = new WebCamTexture(device.name);//根据设备名称创建一个新的WebCamTexture的类,并赋值给tex,此时tex已经包含了摄像头的视频信号。display.texture = tex;//将摄像头的视频信号传递给RawImage中进行画面显示。tex.Play();//播放startStopText.text = "Stop Camera";}}private void StopWebCam(){display.texture = null;tex.Stop();tex = null;}
}

接下来,需要将RawImage和CameraOnButton中的Text赋值给CameraController中,并将CameraController赋值给CameraOnButton和CameaSwitchButton中,分别引用各自的函数,如下图:
CameraOnButton:

CameraSwitchButton:

以上内容建立好后,运行即可。

Unity如何调用摄像头并显示在窗口内相关推荐

  1. 调用摄像头(html5)显示画面

    注意:调用摄像头chrom或其他浏览器需要打开摄像权限 getUserMedia API为用户提供访问硬件设备媒体(摄像头.视频.音频.地理位置等)的接口,基于该接口,开发者可以在不依赖任何浏览器插件 ...

  2. Unity | 如何调用摄像头拍照

    我只用了PC端,其他平台我没试过哈~ 一.摄像头进入unity的过程 1.常见的输入内容 常见的输入内容:声音.图片(影像就是一连串图片不停的放,所以摄像头发给电脑的实际上是很多很多图片) 常见的输入 ...

  3. C#调用bat 不显示DOS窗口,禁止DOS窗口一闪而过

    ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = true;//不创建窗口

  4. ROS运行调用摄像头无法显示的解决办法

    报错: Unable to open camera calibration file [/home/hri/.ros/camera_info/head_camera.yaml] 参考: https:/ ...

  5. Unity调用摄像头并截图

    首先界面是这样的,很简易,脚本上挂了三个按钮 直接上代码 using UnityEngine; using UnityEngine.UI;public class WebCamera : MonoBe ...

  6. 关于Unity调用摄像头扫描二维码与生成二维码的实现方法

    1.常用的生成二维码网址 https://cli.im/ 2.上官网下载二维码插件 http://zxingnet.codeplex.com/ 3.将下载的插件中zxing.unity.dll文件放入 ...

  7. Unity代码调用网络摄像头WebCamTexture

    Unity代码调用网络摄像头WebCamTexture 初始代码 后续功能&代码更新 注意事项 初始代码 编辑器模式或Android环境和实机测试都没有问题. using System.Col ...

  8. mui教程2——窗口管理、调用相册、调用摄像头、调用重力感应、微信朋友圈界面(仿制)分析

    一.窗口管理 1,页面初始化 在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5 ...

  9. unity调用摄像头拍照

    我的unity调用摄像头拍照 因为做的是pc端的,所以不知道手机上效果是怎样的,据说代码是完全相同的. 废话不说,上代码, 打开摄像头代码: /// <summary>/// Opens ...

最新文章

  1. linux下比较文件并输出,Linux使用diff命令比较文件找出文件之间相同的部分
  2. 临床模型评价:C指数(C-Index)、校正曲线(Calibration plot)、决策分析曲线(Decision Curve Analysis, DCA)、NRI指数
  3. undefined reference to `__isnanf'
  4. 一图看懂华为云DevCloud如何应对敏捷开发的测试挑战
  5. 服务器安装 accessdatabaseengine_.net IIS 服务器环境配置
  6. 如何识别计算机病毒,怎样识别计算机病毒
  7. Socket.io详解
  8. Mac 系统 go-kit安装
  9. lfw分类 python_Python机器学习:PCA与梯度上升:009人脸识别与特征脸(lfw_people数据集)...
  10. jmeter进行http接口压力测试
  11. 记关于DNS协议的一次学习(递归查询与迭代查询)
  12. 可汗学院公开课:统计学笔记——基础知识、二项及泊松分布 、大数定律、正态分布
  13. spring security中A granted authority textual representation is required
  14. 洛谷 P2142 高精度减法
  15. 我不想加班,您看我还有机会吗?
  16. Maven resources compiler: Maven project configuration required for module ‘XXX‘ isn‘t available.
  17. C++ 多线程的创建和使用
  18. ubuntu22.04开机后黑屏的解决方法
  19. 服务器连接数据库mysql
  20. sockaddr与sockaddr_in,sockaddr_un结构体详解

热门文章

  1. 【Niagara 01】Tridium N4使用——入门及新建站点
  2. Mysql tinyint(1)与tinyint(4)的区别
  3. VS报出的C2134,C4430,C2238错误
  4. Lucas定理相关证明
  5. 运动控制:运动模式理解
  6. C语言中pthread或Windows API在多线程编程中的基本应用
  7. 树莓派python播放报警声(usb音响)
  8. 也许是得益于快播案,电子证物的程序正义问题终于有了保障
  9. 第2章第26节:英文排版技巧:把英文字母排成一个圆圈 [PowerPoint精美幻灯片实战教程]
  10. 迅雷批处理:漫画下载利器!(娘王下载为例)