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))给这个脚本变量,用于呈现识别后的二维码内容!
最终效果: