【Vuforia+Unity】AR07-实现识别条码、二维码内容功能(Barcode Scanner)

Barcode Scanner in Unity | Vuforia Library官方教程,写的很详细,本教程主要参考对象!

主要实现扫描生活中常见的二维码,然后弹出二维码链接,当然我们也可以再次回调自定义函数,弹出数字内容,AR内容效果!

支持的二维码:

局限性

条码扫描组件还定义检测和跟踪的条形码类型。请注意,扫描的二维码在屏幕上是二维的!它存在UGUI界面中,没办法将3D数字内容与二维码对齐或者同步!要在世界空间中添加内容,请 改用VuMarks或 Barcode、 Ground Plane、  Area Targets或 Instant Image Targets 的组合 。

3.自搭建步骤:(提前安装Vuforia for Unity sdk)

没有安装SDK的请看我的AR01教程【Vuforia+Unity】AR01实现单张多张图片识别(Image Targets)召唤数字内容-CSDN博客

01. 层级面板创建两个组件

找到这个脚本,调节粗细和选择可以识别的二维码。 

 

02. 创建扫描器

用官网提供的代码即可 

创建空脚本注意命名,然后复制下面的代码,下面的代码是Vuforia识别二维码内容的核心功能,我们也可以在此代码上进行新增回调函数和新增其他功能!

using UnityEngine;
using Vuforia;public class SimpleBarcodeScanner : MonoBehaviour
{public TMPro.TextMeshProUGUI barcodeAsText;BarcodeBehaviour mBarcodeBehaviour;void Start(){mBarcodeBehaviour = GetComponent<BarcodeBehaviour>();}// Update is called once per framevoid Update(){if (mBarcodeBehaviour != null && mBarcodeBehaviour.InstanceData != null){barcodeAsText.text = mBarcodeBehaviour.InstanceData.Text;}else{barcodeAsText.text = "";}}
}

挂在这里

我们看到变量上需要一个文本框,这个文本框就是识别二维码之后的链接文本,我们创建一个UGUI的Text (TMP),赋值给这个变量。到此已经实现扫描功能!

 4.实现多个二维码手动选择其一

和前面类似,检查目前场景是否添加了Vuforia组件 ARCamera、  Barcode、 和一个文本 UI -> Text (TMP),

 Barcode挂的脚本:

 

Barcode Behaviour:其中第一个Barcode Behaviour是自带的

Barcode Outline Behaviour,是点击Add Component添加的,因为导入了SDK,所以可以找到

BarcodeCollider 是我们创建的,官方代码如下,主要实现为检测到的二维码添加碰撞器,便于未来我们鼠标或者触摸方式下,能够通过摄像机的射线检测到点击的二维码:

using UnityEngine;
using Vuforia;public class BarcodeCollider : MonoBehaviour
{BarcodeBehaviour mBarcodeBehaviour;MeshCollider mMeshCollider;void Start(){mBarcodeBehaviour = GetComponent<BarcodeBehaviour>();if (mBarcodeBehaviour != null){mBarcodeBehaviour.OnBarcodeOutlineChanged += OnBarcodeOutlineChanged;}}void OnBarcodeOutlineChanged(Vector3[] vertices){UpdateMeshCollider(vertices);}void UpdateMeshCollider(Vector3[] vertices){        if (!mMeshCollider){mMeshCollider = gameObject.AddComponent<MeshCollider>();mMeshCollider.cookingOptions = MeshColliderCookingOptions.None;}Mesh mesh = new Mesh();mesh.vertices = vertices;mesh.triangles = new int []{ 0, 1, 2, 0, 2, 3 }; // Creates 2 trianglesmMeshCollider.sharedMesh = mesh;}
}

然后

创建 空物体 GameObject 并将其命名为 BarcodeScanner,并挂载下面用来扫描二维码的核心脚本,这个脚本实现识别二维码内容,并呈现在UI的文本框内!

创建空脚本BarcodeScanner

using UnityEngine;
using Vuforia;public class BarcodeScanner : MonoBehaviour
{public TMPro.TextMeshProUGUI barcodeAsText;void Update(){if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray.origin, ray.direction, out RaycastHit hit)){barcodeAsText.text = hit.collider.GetComponent<BarcodeBehaviour>().InstanceData.Text;}}}
}

最后把UI文本(Text (TMP))给这个脚本变量,用于呈现识别后的二维码内容!

最终效果:

 安卓导出设置:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804625.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙LiteOS-M 内核初始化

目录 一、LiteOS-M 初始化内核二、LOS_KernelInit代码分析三、LOS_Start代码解析坚持就有收获 一、LiteOS-M 初始化内核 在LiteOS-M应用程序中&#xff0c;系统初始化如下&#xff1a; /*** brief This is the ohos entry, and you could call this in your main funciton af…

stm32利用CubeMX完成按键控制LED灯的点亮与熄灭

首先画电图&#xff0c;如下&#xff1a;&#xff08;会话最小系统后就可以不画了&#xff0c;如果要是画实物的话必须要有的&#xff0c;不能忘&#xff0c;模拟就无所谓了&#xff09; 然后是CubeMX设置时钟 这次使用的是内部8M时钟&#xff0c;这样能避免proteus闪退的情况&…

nginx+keepalived实现nginx高可用集群以及nginx实现Gateway网关服务集群

一、前言 1、简介 Nginx作为一款高性能的Web服务器和反向代理服务器&#xff0c;被广泛使用。且现如今很多高并发场景需要后端服务集群部署&#xff0c;因此nginx也需要支持集群部署从而避免单点故障的问题。 本文将详细介绍使用 KeepalivedNginx 来实现Nginx的高可用集群和N…

Linux环境安装jira

jira 是项目与事务跟踪工具&#xff0c;被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。 jira 软件安装包直接搜官网&#xff0c;然后可以选择免费的来下载&#xff1a; 安装 jira 之前&#xff0c;需要 Java 和 mysql 环境的…

Linux的ACL权限以及特殊位和隐藏属性

前言&#xff1a; ACL是什么&#xff1f; ACL&#xff08;Access Control List&#xff09;是一种权限控制机制&#xff0c;用于在Linux系统中对文件和目录进行细粒度的访问控制。传统的Linux权限控制机制基于所有者、所属组和其他用户的三个权限类别&#xff08;读、写、执行…

八、线性代数二 ,矩阵的秩

目录 1、矩阵子式的定义与子式个数的计算&#xff1a; 2、矩阵秩的定义&#xff1a; 3、矩阵秩的计算方法&#xff1a; 4、矩阵秩的 性质&#xff1a; 线性代数四——几个重要的矩阵点积_线性代数 矩阵点积-CSDN博客 1、矩阵子式的定义与子式个数的计算&#xff1a; 概念&…

Java基于微信小程序的智能停车场管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【python】yolo目标检测模型转为onnx,及trt/engine模型的tensorrt轻量级模型部署

代码参考&#xff1a; Tianxiaomo/pytorch-YOLOv4: PyTorch ,ONNX and TensorRT implementation of YOLOv4 (github.com)https://github.com/Tianxiaomo/pytorch-YOLOv4这个大佬对于各种模型转化写的很全&#xff0c;然后我根据自己的需求修改了部分源码&#xff0c;稍微简化了…

设计模式——三大工厂模式

工厂模式 简单工厂模式&#xff08;静态工厂模式&#xff09; 介绍&#xff1a; 1、简单工厂模式是属于创建型模式&#xff0c;是工厂模式的一种&#xff0c;**简单工厂模式是由一个工厂对象决定创建出哪种产品的实例**。是工厂模式中最简单使用的模式 2、简单工厂模式&#…

使用ffmpeg实现视频片段截取并保持清晰度

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i input.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-ve…

HTB pwn Dragon Army

逆向分析 程序使用了alloca函数扩大了栈区 此处可以泄露libc的地址 程序主要功能在下面 while ( 1 ){while ( 1 ){fflush(stdin);fflush(_bss_start);fprintf(_bss_start, "\n%sDragons: [%d/%d]%s\n\n", "\x1B[1;34m", v5, 13LL, "\x1B[1;37m"…

RLE 稀疏水平集 RLE sparse level sets 论文阅读笔记

目录 RLE 稀疏水平集随机访问水平集游程类型编码CSG 操作增强水平集 表现动画角色网格面到 RLE 水平集自相交时间抗锯齿 总结 原文&#xff1a; Houston, Ben, Mark Wiebe, and Chris Batty. “RLE sparse level sets.” ACM SIGGRAPH 2004 Sketches. 2004. 137. 只有一页&am…

【Java】RestClient的使用

RestClient的使用 先导入Maven坐标&#xff0c;要和elasticsearch和kibana的版本保持一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1<…

【深度学习】LoRA: Low-Rank Adaptation of Large Language Models,论文解读

文章&#xff1a; https://arxiv.org/abs/2106.09685 文章目录 摘要介绍LoRA的特点什么是低秩适应矩阵&#xff1f;什么是适应阶段&#xff1f;低秩适应矩阵被注入到预训练模型的每一层Transformer结构中&#xff0c;这一步是如何做到的&#xff1f; 摘要 自然语言处理的一个重…

c# 类的介绍及延伸

类介绍 类的定义是以关键字 class 开始&#xff0c;后跟类的名称。 类属于引用类型&#xff0c;只能通过new方式创建。 如果类定义中没有指定基类&#xff0c;那其基类为system.object // <访问修饰符> class class类名 <access specifier> class class_name { //…

Math.random、Random随机数的生成

Math.random、Random随机数的生成 Math.random() 方法案例&#xff1a;生成随机整数案例&#xff1a;生成随机字符 Random()类Random生产区间随机数的技巧&#xff1a;减加法案例&#xff1a;猜测随机一个幸运号码 1 - 100案例&#xff1a;生成随机字符 Math.random() 方法 Ma…

数据价值在线化丨TiDB 在企查查数据中台的应用及 v7.1 版本升级体验

本文介绍了企查查在数据中台建设中使用 TiDB 的经验和应用。通过从 MySQL 到 TiDB 的迁移&#xff0c;企查查构建了基于 TiDB Flink 的实时数仓框架 &#xff0c;充分利用了 TiDB 的分布式架构、MySQL 兼容性和完善的周边工具等特性&#xff0c;实现了数据的在线化处理。2023 年…

ACM题解Day6 | 质数素数模块 | 完数难题

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门算法 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽…

Vue模板引用之ref特殊属性

1. 使用实例 <template><input ref"input" name"我是input的name" /><br /><ul><li v-for"arr in array" :key"arr" id"111" ref"itemRefs">{{arr}}</li></ul> </…

较通用web脚手架模板搭建

较通用web脚手架模板搭建 从这里开始就接触到以后写项目的思维了。 做一个web开发&#xff0c;那就要层次分明&#xff0c;要有个实现的规划&#xff0c;这通常也是有一个较为通用的模板的。 总的来说&#xff1a;不同的层次有不同的模块&#xff0c;每个模块有必须实现的功…