Unity+Vuforia+ZXing解析二维码
来源:互联网 发布:什么软件有耽美动漫 编辑:程序博客网 时间:2024/04/30 05:50
unity中扫描二维码最常用的是EasyCodeScan,但使用后还是觉得太过麻烦。这需要对IOS和Android都有一定了解才能根据自己的想法做更改,这对很多半路出家的unity新手们来说就有些困难了(当然我也是新手)。
我做的项目主要AR,所以我就想办法将vuforia与二维码扫描结合到一起。
using UnityEngine;using System.Collections;using System;using Vuforia;using System.Threading;using ZXing;using ZXing.QrCode;using ZXing.Common;using UnityEngine.SceneManagement;public class CameraImageAccess : MonoBehaviour{ private Image.PIXEL_FORMAT m_PixelFormat = Image.PIXEL_FORMAT.GRAYSCALE; private bool m_RegisteredFormat = false; public bool reading; public string QRMessage; public UnityEngine.UI.Text labelQrc; public AudioSource audioSource; Thread qrThread; private Color32[] c; private int W, H; Image QCARoutput; bool updC; bool gotResult = false; void Start() { } void OnEnable() { VuforiaARController.Instance.RegisterTrackablesUpdatedCallback (OnTrackablesUpdated); } var isAutoFocus = CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); if (!isAutoFocus) { CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL); } ); qrThread = new Thread(DecodeQR); qrThread.Start(); } void OnDisable() { qrThread.Abort(); qrThread = null; } public void OnTrackablesUpdated() { Vuforia.CameraDevice cam = Vuforia.CameraDevice.Instance; if (!m_RegisteredFormat) { Vuforia.CameraDevice.Instance.SetFrameFormat(m_PixelFormat, true); m_RegisteredFormat = true; } QCARoutput = cam.GetCameraImage(m_PixelFormat); if (QCARoutput != null) { reading = true; updC = true; } else { reading = false; Debug.Log(m_PixelFormat + " image is not available yet"); } } void Update() { CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); if (reading) { if (QCARoutput != null) { if (updC) { updC = false; Invoke("ForceUpdateC", 1f); if (QCARoutput == null) { return; } c = null; c = ImageToColor32(QCARoutput); if (W == 0 | H == 0) { W = QCARoutput.BufferWidth; H = QCARoutput.BufferHeight; } QCARoutput = null; } } } labelQrc.text = QRMessage; if (gotResult) { audioSource.Play (); gotResult=false; } } void DecodeQR() { var barcodeReader = new BarcodeReader { AutoRotate = false, TryHarder = false }; barcodeReader.ResultFound += OnResultF; while (true) { if (reading && c != null) { try { ZXing.Result result = barcodeReader.Decode(c, W, H); c = null; if (result != null) { QRMessage = result.Text; } } catch(Exception e) { Debug.LogError(e.Message); } } } } void OnResultF(Result result) { Debug.Log(result.Text); gotResult = true; } void ForceUpdateC() { updC = true; } Color32[] ImageToColor32(Vuforia.Image a) { if (!a.IsValid()) return null; Color32[] r = new Color32[a.BufferWidth * a.BufferHeight]; for (int i = 0; i < r.Length; i++) { r[i].r = r[i].g = r[i].b = a.Pixels[i]; } return r; }}
直接复制就可以用,当然可能因为unity和vuforia的版本问题,会有一些报错的情况,这就需要查看文档自行更改了。
0 0
- Unity+Vuforia+ZXing解析二维码
- vuforia + zxing 解析二维码
- unity Vuforia + 二维码解析 使用同一个摄像机
- Unity3d Ar Vuforia +zxing 实现二维码扫描
- ZXing解析二维码
- ZXing解析二维码
- zxing解析二维码--NotFoundException
- Zxing解析二维码
- Zxing解析二维码
- 利用zxing解析二维码
- Zxing生成二维码经典解析
- ZXING生成二维码以及解析
- 使用zxing解析二维码图片
- zxing 二维码生成与解析
- 二维码之zxing二维码解析图片资源
- 二维码之zxing二维码解析图片资源
- 使用ZXing创建二维码和解析二维码
- Unity结合ZXing生成二维码并保存
- 归并排序
- 消息队列
- MySQL免安装版配置部署
- 大数据学习——常用的数据分析法和模型
- LeetCode:155. Min Stack
- Unity+Vuforia+ZXing解析二维码
- 九度OJ-题目1021 统计字符
- EMACScript6之-----------------------let语法
- CSS mask遮罩(自我惯用)
- 《机器学习实战(Scala实现)》(三)——决策树
- 用CSS伪选择器实现脚本控制的按钮功能
- JSP有关内置对象的问题
- 103-atfork 与 fork
- CCF CSP 编程题目和解答-----试题名称:炉石传说 -------201609-3