本来打算使用高通的AR插件来实现,但是高通的官网老是登录不上去,没有办法只有使用EasyAR来实现(手动滑稽)

EasyAR注册以及下载

首先,我们现在EasyAR的官网进行注册;

注册完成后,申请授权

不做商业开发用,我们选择个人版就好

应用名称和PaceageName需要和在unity中一致(本文我们只做Android开发,故不用申请IOS的BundleID)

授权密钥复制保存下来,等会儿要用;

申请API KEY

API KEY和API Seret复制下来,等会也要用;

接下来,下载SDK;

传送门:

下载-EasyAR官网https://www.easyar.cn/view/download.html

这里我们找到UnityPlugin 下载就好;

EasyAR导入Unity

EasyAR4.4.0的版本导入Unity的方式和往常的Import的不太一样,需要在Unity的packageManager中进行操作

载入你刚才下好的包;

Zxing插件下载以及导入

插件已上传百度网盘,如有需要,自行提取

链接:https://pan.baidu.com/s/16CuwPVNxO4tSu2IOVEYCQg 
提取码:xjza 
在unity的Assets文件夹下新建一个 Plugins文件夹,将ZXing插件导入;

Unity打包设置

选择Android

点击PlayerSetting -> player

进行配置;

JDK以及AndroidSDK的接入配置

JDK不要下载过高版本,我下载的是JDK8

AndroidSDK使用的是7.0的版本

具体的SDK和JDK下载以及配置,这里不做详细介绍,如有需要的朋友,可以参考这篇博客

(31条消息) 2018年Unity结合Android SDK下载安装及配置教程_Sinkiang的博客-CSDN博客_unity 安卓sdkhttps://blog.csdn.net/dxj467822057/article/details/80198165?ops_request_misc=&request_id=&biz_id=102&utm_term=unity%E6%8E%A5%E5%85%A5androidsdk&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-80198165.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

场景配置

找到Resources文件夹下的EasyAR文件夹中的Setting

填入,我们当时申请的密钥、APIKEY 、APISecret(PS:如果需要使用云识别,就填入ServerAddress和CloudRecognizerAppID,不需要就不用填)

为了实现图片追踪的效果,我们需要在场景中新建如下的Object

以及一个ImageTarget

场景中的Camera 需要设置成单色模式,背景色选择成黑色;

设定需要追踪的图像

在Assets文件夹下新建一个StreamingAssets文件夹,将需要追踪的图片放进来;并在ImageTarget的Inspector面板设置好参数;

在场景中新建一个Cube,并将它作为ImageTarget的子物体;

至此,打包成APK包,在手机上测试,已经能够完成,识别图片显示模型,并追踪图片位置;

下面开始添加二维码扫描的功能;

二维码扫描脚本

在场景中的ImageTarget下在新建一个Sphere,用来测试根据不同的二维码识别信息显示不同的模型;

新建一个Canvas,在Canvas下新建一个Panel,然后在panel下新建几个Text,用来显示我们的Debug信息;

具体的UI层级可以参考我的,也可以自行组织;

首先,我们需要获取到相机的Texture。在查阅了EasyAR的API文档后,我们知道了,官方为我们封装了方法,可以直接调用;

首先我们获取到场景中的“CameraDevice”,找到他的CameraImageRenderer组件,直接调用官方的方法;

CameraImageRenderer cameraRenderer = GameObject.Find("AR Session (EasyAR)/Camera Device").GetComponent<CameraImageRenderer>();
cameraRenderer.RequestTargetTexture(targetTextureEventHandler); 

使用这个方法要注意,在用完后一定要调用释放资源的方法;

  //释放资源!!!cameraRenderer.DropTargetTexture(targetTextureEventHandler);

因为二维码扫描的是Texture2D所以我们在获取了相机的Texture之后,需要对Texture进行处理,需要将Texture转换为Texture2D;这里可以使用RenderTexture作为媒介来进行转换;具体代码请看示例代码;

在获取二维码信息是,因为需要读取的是Color32的信息,所以,还需要对Texture进行处理;

因为,EasyAR的组件对需要显示的模型是自动控制的,而在这里,我们希望,在没有扫描出二维码信息的时候不显示,并且能够根据不同的二维码显示不同的信息;

所以,我们需要关闭EasyAR的Target的自动显示功能;

   GetComponent<TargetController>().ActiveControl = TargetController.ActiveControlStrategy.None;     

示例代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using easyar;
using ZXing;
using UnityEngine.UI;
using System;//读取摄像头图像
//扫描二维码
//如果和预设信息一致就显示模型
public class ScanQRCode : MonoBehaviour
{public Text isScanBool;public Text scanMessage;public GameObject cube;public GameObject spare;public GameObject trucker;/// <summary>/// 扫描时间间隔/// </summary>float interval = 0.5f;/// <summary>/// 32位颜色信息/// </summary>Color32[] data;/// <summary>/// 用来存储相机贴图信息/// </summary>Texture camTexture;/// <summary>/// 识别结果/// </summary>Result result;/// <summary>/// 二维码识别/// </summary>BarcodeReader barcodeReader;//库文件对象 二维码信息保存的地方/// <summary>/// 是否显示模型/// </summary>public bool isShow ;private Action<Camera, RenderTexture> targetTextureEventHandler;/// <summary>/// 是否开始扫描/// </summary>private bool isScan = false;private void Awake(){targetTextureEventHandler = (camera, texture) =>{if (texture){//获取相机纹理贴图camTexture = texture;}};}private void Start(){isShow = false;//ImageTrackerFrameFilter m_imageTrackerFrameFilter = trucker.GetComponent<ImageTrackerFrameFilter>();//因为我们要让GameObject在扫描识别到二维码之后显示对应的GameObject//所以让显示GameObject不接受EasyAR的自动控制GetComponent<TargetController>().ActiveControl = TargetController.ActiveControlStrategy.None;     }private void FixedUpdate(){StartScan();ScanInterval(3);}/// <summary>/// 扫描间隔/// </summary>/// <param name="s_interval">间隔时间</param>void ScanInterval(float s_interval){if (isScan)//开始扫描{interval += Time.deltaTime;if (interval >= s_interval){interval = 0;//重置计时器Scan();//扫描}}}/// <summary>/// 开启扫描/// </summary>void StartScan(){//如果扫描到了目标就开启扫描if (GetComponent<TargetController>().IsTracked){barcodeReader = new BarcodeReader();//开始扫描isScan = true;isScanBool.text = "true";}else{isScan = false;isScanBool.text = "false";isShow = false;spare.SetActive(false);cube.SetActive(false);}}/// <summary>/// 扫描二维码/// </summary>void Scan(){scanMessage.text = "StartScan";CameraImageRenderer cameraRenderer = GameObject.Find("AR Session (EasyAR)/Camera Device").GetComponent<CameraImageRenderer>();cameraRenderer.RequestTargetTexture(targetTextureEventHandler); scanMessage.text = "GetCamera";//转换成TEXTURE2D并获取color32数据信息data = TextureToTexture2D(camTexture).GetPixels32();//获取二维码信息result = barcodeReader.Decode(data, camTexture.width, camTexture.height);scanMessage.text = "ScanQRCode";if (result != null){isScan = false;isScanBool.text = "false";isShow = true;scanMessage.text = result.Text;if (result.Text == "cube0" || result.Text == "Cube0"){cube.SetActive(true);}if (result.Text == "spare0" || result.Text == "Spare0"){spare.SetActive(true);}//释放资源!!!cameraRenderer.DropTargetTexture(targetTextureEventHandler);}else{isShow = false;spare.SetActive(false);cube.SetActive(false);}}/// <summary>/// 转换成2D纹理/// </summary>/// <param name="texture">需要转换的纹理</param>/// <returns></returns>private Texture2D TextureToTexture2D(Texture texture){Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);RenderTexture currentRT = RenderTexture.active;RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);Graphics.Blit(texture, renderTexture);RenderTexture.active = renderTexture;texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);texture2D.Apply();RenderTexture.active = currentRT;RenderTexture.ReleaseTemporary(renderTexture);return texture2D;}
}

将脚本挂载在Image Target下就可以了,并将对应的参数设置好;

将ImageTarget下的Cube和Sphere隐藏掉

直接打包成APK,在手机上进行运行测试;

测试效果

参考文章

(31条消息) Unity技术分享之Unity中Texture和Texture2D格式互相转换_月儿圆-CSDN博客_unity的texture2dhttps://blog.csdn.net/s15100007883/article/details/80411638?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164188209416780255241008%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164188209416780255241008&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-80411638.first_rank_v2_pc_rank_v29&utm_term=unity+texture%E8%BD%ACtexture2d&spm=1018.2226.3001.4187

EasyAR+ZXing实现UnityAR二维码扫描相关推荐

  1. Android zxing,轻松实现二维码扫描、生成

    Android  zxing,轻松实现二维码扫描.生成 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有, ...

  2. Android自由行之走进zxing,轻松实现二维码扫描

    现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. ...

  3. Android开源之行之走进zxing,轻松实现二维码扫描(二)

    对于Zxing开源项目的简化上文已给出,源码经过测试且不断修改.众所周知,Zxing项目的扫描是横向的,这么引用的用户体验确实不好:然而盲目的修改会出现拉伸以及样本采集的偏离.所以这里说一下如何将横屏 ...

  4. 使用ZXing实现二维码扫描

    在Android开发中有时我们需要实现二维码扫描功能,现在就来简单介绍一下使用ZXing 来实现二维码扫描功能. 一.在module的build.gradle中添加依赖dependencies com ...

  5. 【IOS】集成zxing(二维码扫描)

    现在zxing已经到了2.2版本,以前的集成方式出了点问题.下面我做出一点修正. 以前的版本的集成方法,参考:http://blog.devtang.com/blog/2012/12/23/use-z ...

  6. 二维码扫描开源库ZXing定制化【转】

    转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. ...

  7. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题

    自定义ZXing二维码扫描界面并解决取景框拉伸等问题 参考文章: (1)自定义ZXing二维码扫描界面并解决取景框拉伸等问题 (2)https://www.cnblogs.com/tommylemon ...

  8. 二维码扫描ZXing简化

    最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...

  9. 快速集成二维码扫描,使用最新版本的zxing(2017.11.10抽取zxing代码)

    github 地址: github.com/maning0303/- ZXingCode 快速集成二维码扫描,使用最新版本的zxing代码提取(2017.11.10) 功能: 1:生成二维码(带Log ...

  10. Android 基于google Zxing实现二维码 条形码扫描,仿微信二维码扫描效果

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请注 ...

最新文章

  1. Docker之镜像、容器、仓库概念
  2. 软件作坊模式工件应用论
  3. 面向对象分析与设计小结
  4. 将数据传入重定向网页
  5. python各种数据类型的常用方法_python的基本数据类型:列表的方法
  6. OSChina_IOS版客户端笔记(四)_程序数据、缓存的管理
  7. ios3怎么取消长按弹出菜单_苹果:iOS13取消3D-Touch重压改为长按只是个BUG~
  8. 使用maven导入任意jar包
  9. Element ui 中的Upload用法
  10. 操作系统—死锁的概念
  11. 图的存储结构之十字链表、邻接多重表、边集数组
  12. mysql中key的用法_数据库中KEY的用法
  13. sqlserver中查询(升序、降序、top、百分比)
  14. 认知-洞察力:洞察力
  15. 「笔耕不辍」zookeeper集群之间如何通讯
  16. 第一次安装Microsoft SharePoint Protal Server 2003遇到的问题
  17. 数学悖论与三次数学危机
  18. ‘‘红包来了—红包来了—‘‘Python制作一个微信红包提示系统。
  19. SAMSUNG S3C2440的简易BootLoader ㈢
  20. Synchronized的前因后果

热门文章

  1. 传google将要退出中国市场
  2. 计算机程序设计员( 国家职业标准三级),计算机程序设计员国家职业标准
  3. Ember.js 初学指南
  4. Linux ruby离线安装
  5. SmartDrv的前世今生——PrimoCache_2.2.0汉化
  6. BTP-2118 玩 GTA5
  7. 两侧广告HTML,网页左右两侧居中的对联广告代码
  8. 程序猿崛起2——互联网时代下的新潮流和新活法
  9. 安卓4.X的桌面启动器-尖端启动器APEX_我是亲民_新浪博客
  10. 免费网站源码 织梦模板下载