Hololens开发二维码扫描和场景重置

写这篇文章的目的主要是记录一下最近的工作成果,感觉有些东西还是比较有价值的。


1.二维码扫描。在Hololens上开发二维码扫描功能,其实已经有很多文章介绍过了,但大多是针对特殊版本,遇到其他版本或版本升级则又会出现BUG。我在这里介绍的方法则更接近于一种通用解决方案。


需要的工具:Uniity2017.1.2f1,VisualStudio2017版本15.4.4,ZXing.Net.0.16.0.0


这里主要遇到的问题是ZXing对Unity输出Hololens版的UWP支持不好,不是编译出错就是编译完无法使用。我解决这个问题主要参考了这个博客的文章,主要思路是自己制作符合Unity要求的UWP的DLL,在里面引用ZXing的DLL,也就是把ZXing的DLL封装一下再导入Unity,这样就可以解决兼容性问题。


首先在vs中新建一个类库的通用windows工程,选择.Net framework2.0作为运行环境,因为unity是基于.net2.0的。将ZXing的UWP的相关文件拷贝到工程目录中,写代码调用二维码解析的功能,再输出解析出的字符串。

using ZXing;

namespace ZxingLib
{
    public static class MyZxingLib
    {
        public static string GetMyStr(byte[] data,int width,int height)
        {
            /// <summary> ZXing中的方法,可读取二维码中的内容 </summary>
            BarcodeReader barcodeReader = new BarcodeReader();
            /// <summary> 包含RGBA </summary>
            var br = barcodeReader.Decode(data, width, height, BitmapFormat.RGBA32);
            
            return br.Text;
        }

    }
}

我的代码很简单,输入的第一个参数为扫描到的二维码图片转换成的二进制数组,剩下两个为图片的宽和高,输出为解析后的文本。然后将生成的dll拷贝到Unity的Plugins目录,最后要注意,把ZXing的winmd文件拷贝到Plugins目录,这两个文件的导入设置都只选择WSAPlayer,SDK选择UWP并勾选Don't process。在Unity中调用这个函数时必须在前后添加代码#if !UNITY_EDITOR和#endif。


2.项目中有个需求是重新载入场景,在Unity Editor中使用SceneManager.LoadScene函数很容易实现,但在Hololens中,重新载入场景后,输入圆点却没有反应了。后来经过反复测试,发现应该是Holotoolkit提供的InputManager在重新载入场景时被销毁,又不能重新创建造成的。因此,新建一个脚本在Start()中添加DontDestroyOnLoad(gameObject);使其不会被销毁,把脚本挂到InputManager上,这样就解决了这个问题。


解决了这两个问题后,感觉Hololens开发确实有很多未知问题,尤其伴随着win10、vs、unity和Holotoolkit的升级,新的问题还在不断涌现(在升级win10的1709之后,我的Hololens和模拟器就无法用vs2017连接了),真不知道什么时候开发环境才能稳定下来。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值