NRE的编程笔记

导航

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 2019-06-25 20:43  NRE  阅读(1018)  评论(0编辑  收藏  举报