NRE的编程笔记

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Unity3D 调用相机

最近开发项目,其中有一个需求是要调用安卓相机实现扫描功能。完了,懵逼了,没搞过,那就问度娘呗。百度出来的答案,基本上都是使用 AndroidStudio 开发一个 jar 包,然后放到 Unity3D 里面使用。这种 方法实现肯定没问题,但是我觉得很不友好,Unity3D 开发人员,平常使用的都是 C# 语言,用 Java 去开发,总少不了踩一堆坑,如果是大佬,那另说。而且有的时候,网上的教程不一定符合自己的需求,改起来也困难重重。

还好 Unity3D 给我们提供了接口,这可省了不少麻烦。而且不仅可以调用手机的相机,电脑的相机也可以调用。逻辑很简单,注释我也写的很详细,下面就直接上代码了:

复制代码
 1 using UnityEngine;
 2 using UnityEngine.UI;
 3 
 4 public class Test : MonoBehaviour 
 5 {
 6     #region --变量定义
 7     [SerializeField] private Vector2 webCamSize = new Vector2(1920, 1080);
 8     [SerializeField] private int webCamFPS = 20;
 9     [SerializeField] private RawImage targetImage;
10     private WebCamTexture webCamTexture;
11     #endregion
12 
13     #region --系统函数
14     private void Start()
15     {
16         StartCamera();
17     }
18     #endregion
19 
20     #region --自定义函数
21     /// <summary>
22     /// 启用相机
23     /// </summary>
24     public void StartCamera()
25     {
26         //发起使用相机设备权限的请求
27         Application.RequestUserAuthorization(UserAuthorization.WebCam);
28         //如果请求授权成功。
29         if (Application.HasUserAuthorization(UserAuthorization.WebCam))
30         {
31             //获取相机设备。有的设备有多个相机,所以这里返回的是个数组。
32             WebCamDevice[] devices = WebCamTexture.devices;
33             //生成一张相机实时渲染的纹理图。
34             webCamTexture = new WebCamTexture(devices[0].name, (int)webCamSize.x, (int)webCamSize.y, webCamFPS);
35             //将相机画面渲染的UI的RawImage上。
36             targetImage.texture = webCamTexture;
37             //开始渲染。
38             webCamTexture.Play();
39         }
40     }
41     #endregion
42 }
复制代码

就这么几句话就能调用相机,比上面说的打包 jar 包去调用相机简直不知道简单多少倍。

如果是开发手机端的朋友,肯定会发现,上面这段代码调用相机后,相机的画面显示会有点问题,画面旋转了90度,其实只需要将我们显示用的 RawImage 旋转90度即可。

posted on   NRE  阅读(1024)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示