配置EasyAR Unity SDK

这篇文章介绍如何使用EasyAR.unitypackage配置EasyAR。

如果你需要运行EasyAR unity样例,请阅读 这篇文章

安装需求

  • Unity 4.6或更新版本

  • (如果要发布Android应用)Android SDK with Build Tools 至少需要版本20.0.0

  • (如果要发布iOS应用)IPhone或IPad或其它真实Apple设备(EasyAR不支持在虚拟机上运行)

导入Package

首先,你需要下载EasyAR压缩包,找到EasyAR.unitypackage,打开并导入到Unity中。

../_images/image43.png

初始化EasyAR

为了让EasyAR正常工作,你需要将EasyAR prefab或其它prefabs添加到场景。拖拽 EasyAR Prefab 到场景中。

../_images/image44.png

你可以在登录EasyAR网站后创建key。你可以在 EasyAR SDK入门 找到如何操作。然后使用这个key来初始化EasyAR。

可以添加如下两行代码到你的初始化代码中。 (until 1.2.1)

ARBuilder.Instance.InitializeEasyAR(key);
ARBuilder.Instance.EasyBuild();

如果使用默认配置(CameraDeviceBaseBehaviour.CaptureWhenStart是启用的)EasyAR将在Mon oBehaviour.Start调用的时候开始运行。所以最好将上面两行代码放到Awake里面。

如果你想看到和样例一样的输入key的框,可以创建一个脚本并添加以下代码,并把这个脚本拖拽到EasyAR prefab上面。 (until 1.2.1)

using UnityEngine;
namespace EasyAR
{
    public class ARIsEasyBehaviour : MonoBehaviour
    {
        [TextArea(1, 10)]
        public string Key;
        private void Awake()
        {
            ARBuilder.Instance.InitializeEasyAR(Key);
            ARBuilder.Instance.EasyBuild();
        }
    }
}

在EasyAR 1.3 以及后面版本,你只需要将key粘贴到EasyAR_xxx物体上。这上面默认有一个脚本做了上面的事情。 (since 1.3.0)

添加ImageTarget

ImageTarget有许多用法,可以参考HelloARTarget样例。

如果需要在场景中静态配置ImageTarget,需要拖拽一个 ImageTarget Prefab 到场景中。如何配置可以参考 ImageTarget PrefabImageTargetBaseBehaviour

../_images/image45.png ../_images/image46.png

Target事件 (until 1.2.1)

你可以在 ImageTargetBehaviour 中处理target相关事件

public class EasyImageTargetBehaviour : ImageTargetBehaviour, ITargetEventHandler
{
    void ITargetEventHandler.OnTargetFound(Target target)
    {
        Debug.Log("Found: " + target.Id);
    }
    void ITargetEventHandler.OnTargetLost(Target target)
    {
        Debug.Log("Lost: " + target.Id);
    }
    void ITargetEventHandler.OnTargetLoad(Target target, bool status)
    {
        Debug.Log("Load target (" + status + "): " + target.Id + " -> " + target.Name);
    }
    void ITargetEventHandler.OnTargetUnload(Target target, bool status)
    {
        Debug.Log("Unload target (" + status + "): " + target.Id + " -> " + target.Name);
    }
}

或是在实现了 ITargetEventHandler 接口的全局target管理器中处理target事件

public class EasyARTargetMananger : MonoBehaviour, ITargetEventHandler
{
    void ITargetEventHandler.OnTargetFound(Target target)
    {
        Debug.Log("Found: " + target.Id);
    }
    void ITargetEventHandler.OnTargetLost(Target target)
    {
        Debug.Log("Lost: " + target.Id);
    }
    void ITargetEventHandler.OnTargetLoad(Target target, bool status)
    {
        Debug.Log("Load target (" + status + "): " + target.Id + " -> " + target.Name);
    }
    void ITargetEventHandler.OnTargetUnload(Target target, bool status)
    {
        Debug.Log("Unload target (" + status + "): " + target.Id + " -> " + target.Name);
    }
}

你可以在这些事件中控制ImageTarget节点下物体的显示/隐藏。

Target事件 (since 1.3.0)

你可以在 ImageTargetBehaviour 中处理target相关事件

public class EasyImageTargetBehaviour : ImageTargetBehaviour
{
    protected override void Awake()
    {
        base.Awake();
        TargetFound += OnTargetFound;
        TargetLost += OnTargetLost;
        TargetLoad += OnTargetLoad;
        TargetUnload += OnTargetUnload;
    }
    void OnTargetFound(ImageTargetBaseBehaviour behaviour)
    {
        Debug.Log("Found: " + Target.Id);
    }
    void OnTargetLost(ImageTargetBaseBehaviour behaviour)
    {
        Debug.Log("Lost: " + Target.Id);
    }
    void OnTargetLoad(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
    {
        Debug.Log("Load target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
    }
    void OnTargetUnload(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
    {
        Debug.Log("Unload target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
    }
}

或是在全局target管理器中处理target事件

public class EasyARTargetMananger : MonoBehaviour
{
    private void Awake()
    {
        FindObjectOfType().Initialize();
        foreach (var behaviour in ARBuilder.Instance.AugmenterBehaviours)
        {
            behaviour.TargetFound += OnTargetFound;
            behaviour.TargetLost += OnTargetLost;
            behaviour.TextMessage += OnTextMessage;
        }
        foreach (var behaviour in ARBuilder.Instance.TrackerBehaviours)
        {
            behaviour.TargetLoad += OnTargetLoad;
            behaviour.TargetUnload += OnTargetUnload;
        }
    }
    void OnTargetFound(AugmenterBaseBehaviour augmenterBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target)
    {
        Debug.Log("Found: " + target.Id);
    }
    void OnTargetLost(AugmenterBaseBehaviour augmenterBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target)
    {
        Debug.Log("Lost: " + target.Id);
    }
    void OnTargetLoad(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
    {
        Debug.Log("Load target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
    }
    void OnTargetUnload(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
    {
        Debug.Log("Unload target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
    }
    private void OnTextMessage(AugmenterBaseBehaviour augmenterBehaviour, string text)
    {
        Debug.Log("got text: " + text);
    }

你可以在这些事件中控制ImageTarget节点下物体的显示/隐藏。

Bundle ID(Android/iOS)

你需要在生成Android/iOS应用的时候设置bundle ID。 bundle ID 应该与easyar网页上生成的ID 相同。否则可能造成SDK初始化失败并黑屏。如果是在 Mac or Windows上,这个ID就不需要了。

../_images/image10.png

Graphics API(Android/iOS)

在导出Android和iOS应用的时候,需要设置graphics API 为OpenGL ES 2.0。这个设置在不同的Unity版本中有所不同。

Unity 4.x 中设置如下

../_images/image11.png ../_images/image12.png

Unity 5.x 设置如下

../_images/image13.png ../_images/image14.png

XCode 配置(iOS)

如果你在使用最新的Unity版本,Unity会自动完成这个步骤。

如果你在生成iOS app,在Unity打包生成Xcode工程之后,需要多一步设置。

XCode 6.x: 添加 “libc++.dylib” 到链接选项中

../_images/image15.png

XCode 7.x: 添加 “libc++.tbd” 到链接选项中。并设置 “Enable Bitcode” 为“NO”。

../_images/image16.png ../_images/image17.png