Unity 打开摄像头 并显示在UI

ops/2025/2/20 14:27:35/

需求:

打开相机并显示在UI上

效果:

注意:

电脑可能有多个摄像头,注意名称

代码:

using System;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endifnamespace Streamlab.XingJiKongLong
{
#if UNITY_EDITOR[CustomEditor(typeof(RealCameraDeviceManager))]public class RealCameraDeviceManagerEditor : Editor{private RealCameraDeviceManager script;private void OnEnable(){script = (RealCameraDeviceManager)target;}public override void OnInspectorGUI(){base.OnInspectorGUI();GUILayout.BeginHorizontal();{if (GUILayout.Button("初始化", GUILayout.Height(50))){script.InitDevices();}if (GUILayout.Button("打开", GUILayout.Height(50))){script.Play();}if (GUILayout.Button("关闭", GUILayout.Height(50))){script.Stop();}if (GUILayout.Button("暂停", GUILayout.Height(50))){script.Pause();}}GUILayout.EndHorizontal();}}
#endifpublic class RealCameraDeviceManager : MonoBehaviour{public bool Inited = false;public bool IsPlaying = false;private WebCamDevice CurrentWebCamDevice;private WebCamTexture CurrentWebCamTexture;public RawImage image;/// <summary>/// 默认摄像头设备名称/// </summary>public string DefaultWebCamDeviceName = "USB2.0 PC CAMERA";public List<string> WebCamDevice = new List<string>();public void InitDevices(){WebCamDevice[] devices = WebCamTexture.devices;if (devices.Length == 0){throw new Exception("暂未识别到摄像头设备,请检查摄像头有没有");}else{WebCamDevice.Clear();foreach (var item in devices){Debug.Log($"摄像头设备【{item.name}】");WebCamDevice.Add(item.name);}}if (string.IsNullOrEmpty(DefaultWebCamDeviceName)){DefaultWebCamDeviceName = devices[0].name;}CurrentWebCamDevice = devices.Where(x => x.name == DefaultWebCamDeviceName).FirstOrDefault();CurrentWebCamTexture = new WebCamTexture(CurrentWebCamDevice.name);if (image == null){throw new Exception("未指定显示摄像头的UI");}image.texture = CurrentWebCamTexture;Inited = true;}public void Play(){if (Inited == false){throw new Exception("未初始化摄像头设备");}CurrentWebCamTexture.Play();IsPlaying = true;}public void Stop(){if (Inited == false){throw new Exception("未初始化摄像头设备");}CurrentWebCamTexture.Stop();IsPlaying = false;}public void Pause(){if (Inited == false){throw new Exception("未初始化摄像头设备");}CurrentWebCamTexture.Pause();IsPlaying = false;}}
}

 一键三联

点赞·留言·收藏

如果可以帮到你,好用的话,记得一键三连。

毕竟博主写文章是靠爱发电,所以爱会消失对不对


http://www.ppmy.cn/ops/159714.html

相关文章

【Scrapy】Scrapy教程5——第一个Scrapy项目

文章目录 Scrapy目录结构第一个爬虫运行爬虫必要说明start_requests()和start_urls如何关闭allowed_domains的限制通过前几节的学习,我们已经了解了Scrapy的基本操作,下面我们开始第一个项目,我以本人的 网址为例进行爬虫讲解,之所以用我自己的网站,是因为我这个网站本来…

idea日常报错之UTF-8不可映射的字符

目录 一、UTF-8不可映射的字符的解决 1、出现这种报错的情形 2、具体解决办法 前言&#xff1a; 在我们日常代码编写的时候可能会遇到各式各样的错误&#xff0c;有时候并不是你改动了代码&#xff0c;而是莫名其妙就出现的报错&#xff0c;今天我就遇到一个在maven编译的时候…

HarmonyOS的核心特性:分布式技术引领创新

在数字化浪潮汹涌的今天&#xff0c;物联网&#xff08;IoT&#xff09;技术的飞速发展正逐步打破设备间的界限&#xff0c;使万物互联成为可能。HarmonyOS&#xff0c;作为华为自主研发的分布式全场景操作系统&#xff0c;凭借其核心的分布式技术&#xff0c;不仅引领了操作系…

平面与平面相交算法杂谈

1.前言 空间平面方程&#xff1a; 空间两平面如果不平行&#xff0c;那么一定相交于一条空间直线&#xff0c; 空间平面求交有多种方法&#xff0c;本文进行相关讨论。 2.讨论 可以联立方程组求解&#xff0c;共有3个变量&#xff0c;2个方程&#xff0c;而所求直线有1个变量…

STM32 外部中断和NVIC嵌套中断向量控制器

目录 背景 外部中断/事件控制器(EXTI) 主要特性 功能说明 外部中断线 嵌套向量中断控制器 特性 ‌中断线&#xff08;Interrupt Line&#xff09; 中断线的定义和作用 STM32中断线的分类和数量 优先级分组 抢占优先级&#xff08;Preemption Priority&#xff09; …

iframe 高さ 自動調整

iframeに異なるドメイン&#xff08;クロスドメイン&#xff09;のコンテンツを読み込んで高さを自動調節する方法 - みのるの備忘録 wordpress (親) 側の設定 <apex:iframe id"iframe" src"{!IF(isURL,Url, URLFOR($Resource.test))}" scrolling"…

【电脑】u盘重装win7

u盘必须8GB以上 1. CPU型号 首先查看CPU的型号看看到底能不能装win7 2. 下载光盘映像文件 网址 看电脑是多少位的机器(32位下载x86 64位下载x64) 一共是这么多个版本按需下载对应的版本 电脑小白推荐无脑下载旗舰版 将链接复制到迅雷进行下载 3. 下载软碟通 网址 下…

DeepSeek生成思维导图

一、准备阶段 工具准备 安装思维导图软件&#xff08;推荐XMind/MindMaster/在线工具如ProcessOn&#xff09; 打开DeepSeek官网或集成平台&#xff08;https://www.deepseek.com/&#xff09; 明确需求 确定思维导图核心主题&#xff08;如"碳中和实施方案"&…