将 Unity3D 与 ZXing 集成

Posted

技术标签:

【中文标题】将 Unity3D 与 ZXing 集成【英文标题】:Integrate Unity3D with XZing 【发布时间】:2016-04-10 17:54:19 【问题描述】:

我一直在从事一个使用 Unity3D 和 Vuforia 提供增强现实的项目。现在我想集成 XZing 以从 QR 码获取数据并将这些信息显示在我的 Unity 资产/对象之一中。

在包含 XZing 资产并将 VuforiaScanner.cs 脚本放置到 ARCamera 后,无法从相机设备对象加载图像。

你知道如何解决这个问题或知道一些将 XZing 实现到 Vuforia/Unity3D 中的教程吗?

这是 VuforiaScanner.cs 的代码片段

using UnityEngine;
using System;
using System.Collections;

using Vuforia;

using System.Threading;

using ZXing;
using ZXing.QrCode;
using ZXing.Common;


[AddComponentMenu("System/VuforiaScanner")]
public class VuforiaScanner : MonoBehaviour
    
    private bool cameraInitialized;

    private BarcodeReader barCodeReader;

    void Start()
            
        barCodeReader = new BarcodeReader();
        StartCoroutine(InitializeCamera());
    

    private IEnumerator InitializeCamera()
    
        // Waiting a little seem to avoid the Vuforia's crashes.
        yield return new WaitForSeconds(1.25f);

        var isFrameFormatSet = CameraDevice.Instance.SetFrameFormat(Image.PIXEL_FORMAT.RGB888, true);
        Debug.Log(String.Format("FormatSet : 0", isFrameFormatSet));

        // Force autofocus.
        var isAutoFocus = CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        if (!isAutoFocus)
        
            CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL);
        
        Debug.Log(String.Format("AutoFocus : 0", isAutoFocus));
        cameraInitialized = true;
    

    private void Update()
    
        if (cameraInitialized)
        
            try
            
                /** 
                 * AT THIS POINT CAMERAFEED IS NULL 
                 **/
                var cameraFeed = CameraDevice.Instance.GetCameraImage(Image.PIXEL_FORMAT.RGB888);
                if (cameraFeed == null)
                
                    return;
                
                var data = barCodeReader.Decode(cameraFeed.Pixels, cameraFeed.BufferWidth, cameraFeed.BufferHeight, RGBLuminanceSource.BitmapFormat.RGB24);
                if (data != null)
                
                    // QRCode detected.
                    Debug.Log(data.Text);
                
                else
                
                    Debug.Log("No QR code detected !");
                
            
            catch (Exception e)
            
                Debug.LogError(e.Message);
            
        
        

提前致谢。

【问题讨论】:

VuforiaScanner.cs 行 var data = barCodeReader.Decode(cameraFeed.Pixels, cameraFeed.BufferWidth, cameraFeed.BufferHeight, RGBLuminanceSource.BitmapFormat.RGB24); enter image description here 【参考方案1】:

你谷歌了吗

“Unity3D ZXing”

?有大量的讨论,例如:

http://forum.unity3d.com/threads/zxing-library-with-unity.335017/

请注意,正如它所说的那样,

ios 的 WebCamTexture 没有返回正确的宽度和高度...

这是 Unity3D 的一个相当大的问题,并且多年来一直存在,

http://answers.unity3d.com/answers/687987/view.html

 private IEnumerator _workAroundRisibleUnityBug()
     
     while ( frontCam.width < 100 )
         
         Debug.Log("the width/height values are not yet ready.");
         Debug.Log( frontCam.width +" " +frontCam.height);
         yield return null;
         

     Debug.Log("the width/height values are now meaningful.");
     Debug.Log( frontCam.width +" " +frontCam.height);

【讨论】:

以上是关于将 Unity3D 与 ZXing 集成的主要内容,如果未能解决你的问题,请参考以下文章

集成Unity3D到iOS应用程序中

使用 Unity3d 制作 VST

Unity3D集成TortoiseSVN

[Unity3D]自制UnityForAndroid二维码扫描插件

Unity3D开发之——海康威视摄像机SDK集成

unity3d导出到IOS程序下 集成unity3dAR功能