EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

时间:2022-08-31 23:05:22
二维码在我们生活总早已是司空见惯了,当AR碰撞上二维码,一定可以产生好玩的效果。EasyAR对于二维码的识别与支持是相当不错的,所以在这一篇与下一篇的教程中,我们会分享如何从零开发二维码+AR 的应用。 Step 1:开发环境 我们需要新建一个unity项目,并将"EasyAR_SDK_2.0.0_Basic" 的unitypackage导入,关于EasyAR+unity 这些基础操作不懂的可以看看之前的文章“EasyAR 初学者入门指南(1)---显示模型”,在这里我一笔带过。导入之后,我们的unity目录界面应该是这样的:

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

我们删除原有的Main Camera,将"EasyAR_ImageTracker-1_QRCode-1" 拖到面板中。并将官网申请的Key填好。

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

观察"EasyAR_ImageTracker-1_QRCode-1"这个预制体,对比与我们之前常用的"EasyAR_Startup",发现多了一个"BarCodeScanner" 的部分。

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

它上面所挂的脚本"QRCodeScannerBehaviour"使用来实现二维码的扫描与识别功能的。这是对于它的具体描述:

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)

Step 2:制作二维码资源 我们需要准备二维码的图片,有许多网站都可以来制作自己的二维码。我制作的内容大致如下:

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)


大家也可以发挥自己的脑洞,随意写些内容,目前我们先实现通过EasyAR SDK 来实现扫描二维码 显示文字的功能。 Step 3:编辑代码 我们准备好了二维码,接下来就是在unity里编辑代码来实现功能,首先我们在"EasyAR_ImageTracker-1_QRCode-1" 下新建一个脚本,命名为"ARIsEasyBehaviour",

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)


脚本下载地址:链接: https://pan.baidu.com/s/1dF5tigx 密码: 9ag5
using System.Collections;
using UnityEngine;

namespace EasyAR
{
public class ARIsEasyBehaviour : MonoBehaviour
{
private const string title = "Please enter KEY first!";
private const string boxtitle = "===PLEASE ENTER YOUR KEY HERE===";
private const string keyMessage = ""
+ "Steps to create the key for this sample:\n"
+ " 1. login www.easyar.com\n"
+ " 2. create app with\n"
+ " Name: HelloARQRCode (Unity)\n"
+ " Bundle ID: cn.easyar.samples.unity.helloarqrcode\n"
+ " 3. find the created item in the list and show key\n"
+ " 4. replace all text in TextArea with your key";

private bool startShowMessage;
private bool isShowing;
private string textMessage;

private void Awake()
{
var EasyARBehaviour = FindObjectOfType<EasyARBehaviour>();
if (EasyARBehaviour.Key.Contains(boxtitle))
{
#if UNITY_EDITOR
UnityEditor.EditorUtility.DisplayDialog(title, keyMessage, "OK");
#endif
Debug.LogError(title + " " + keyMessage);
}
EasyARBehaviour.Initialize();
foreach (var behaviour in ARBuilder.Instance.ARCameraBehaviours)
{
behaviour.TargetFound += OnTargetFound;
behaviour.TargetLost += OnTargetLost;
behaviour.TextMessage += OnTextMessage;
}
foreach (var behaviour in ARBuilder.Instance.ImageTrackerBehaviours)
{
behaviour.TargetLoad += OnTargetLoad;
behaviour.TargetUnload += OnTargetUnload;
}
}

void OnTargetFound(ARCameraBaseBehaviour arcameraBehaviour, TargetAbstractBehaviour targetBehaviour, Target target)
{
Debug.Log("<Global Handler> Found: " + target.Id);
}

void OnTargetLost(ARCameraBaseBehaviour arcameraBehaviour, TargetAbstractBehaviour targetBehaviour, Target target)
{
Debug.Log("<Global Handler> Lost: " + target.Id);
}

void OnTargetLoad(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
{
Debug.Log("<Global Handler> Load target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
}

void OnTargetUnload(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
{
Debug.Log("<Global Handler> Unload target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
}

private void OnTextMessage(ARCameraBaseBehaviour arcameraBehaviour, string text)
{
textMessage = text;
startShowMessage = true;
Debug.Log("got text: " + text);
}

IEnumerator ShowMessage()
{
isShowing = true;
yield return new WaitForSeconds(2f);
isShowing = false;
}

private void OnGUI()
{
if (startShowMessage)
{
if (!isShowing)
StartCoroutine(ShowMessage());
startShowMessage = false;
}

if (isShowing)
GUI.Box(new Rect(10, Screen.height / 2, Screen.width - 20, 30), textMessage);
}
}
}




我们在这段脚本文件实现的是首先Target 的识别然后是扫描二维码之后接收结果并实现绘制在屏幕上,对于Target 的found与load等方法相信大家已经很熟悉了。对于OnTextMessage()接收返回结果然后赋值给textMessage,并由OnGUI()进行绘制。我们Build测试,会实现如下的效果:

EasyAR 初学者入门指南(3)---二维码+AR的应用(上)



PS:在实际的开发中,我们不会像这样从零来搭建AR+二维码的开发环境,一般是直接在EasyAR官网的实例进行二次开发,这样会大大提高我们的效率。下一篇我们会实现二维码+AR的一个实例。