您的位置:首页 > 其它

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

2017-09-11 14:07 351 查看
二维码在我们生活总早已是司空见惯了,当AR碰撞上二维码,一定可以产生好玩的效果。EasyAR对于二维码的识别与支持是相当不错的,所以在这一篇与下一篇的教程中,我们会分享如何从零开发二维码+AR 的应用。

Step 1:开发环境

我们需要新建一个unity项目,并将"EasyAR_SDK_2.0.0_Basic" 的unitypackage导入,关于EasyAR+unity 这些基础操作不懂的可以看看之前的文章“EasyAR
初学者入门指南(1)---显示模型
”,在这里我一笔带过。导入之后,我们的unity目录界面应该是这样的:





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





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













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













Step 2:制作二维码资源

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





大家也可以发挥自己的脑洞,随意写些内容,目前我们先实现通过EasyAR SDK 来实现扫描二维码 显示文字的功能。

Step 3:编辑代码

我们准备好了二维码,接下来就是在unity里编辑代码来实现功能,首先我们在"EasyAR_ImageTracker-1_QRCode-1" 下新建一个脚本,命名为"ARIsEasyBehaviour",





脚本下载地址:链接: 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测试,会实现如下的效果:





PS:在实际的开发中,我们不会像这样从零来搭建AR+二维码的开发环境,一般是直接在EasyAR官网的实例进行二次开发,这样会大大提高我们的效率。下一篇我们会实现二维码+AR的一个实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: