柚子AR柚子AR

增强现实
AR行业媒体门户网站

EasyAR SDK增强现实引擎入门指南

EasyAR是好用免费的全平台AR(Augmented Reality,增强现实)引擎。EasyAR支持使用平面目标的AR,支持1000个以上本地目标的流畅加载和识别,支持基于硬解码的视频(包括透明视频和流媒体)的播放,支持二维码识别,支持多目标同时跟踪。EasyAR支持PC和移动设备等多个平台,EasyAR不会显示水印,也没有识别次数限制。在拿到EasyAR package或EasyAR样例之后,你需要一个key才能使用。请确保在使用EasyAR之前阅读以下内容。


使用EasyAR之前需要使用邮箱在www.easyar.cn注册,如果邮箱已经在视+官网注册,可以直接登录。为了初始化 EasyAR SDK,需要先在网页系统中生成key。创建应用,输入应用名称和Bundle ID(移动应用必填),点击确定后生成 Key

 blob.png

如果需要在Android/iOS设备上使用EasyAR,必须填写Bundle ID/Package Name,这个与你所创建的应用的Bundle ID/Package Name必须一致,否则可能初始化失败。在创建应用之后,创建过程填写的数据仍可修改。在创建之后,你可以在下图位置获得key。

blob.png

修改用户名(可选)登录并点击右上角图标,编辑基本信息即可修改系统生成的用户名。EasyAR网站和论坛使用相同的用户名,可以使用邮箱或用户名来登录EasyAR网站和论坛。你可以在EasyAR官网点击“社区”进入EasyAR论坛。

 blob.png

注意:用户名只可修改一次。


平台要求


EasyAR 是跨平台的 AR SDK,支持以下操作系统

Windows 7 及以上版本(7/8/8.1/10。*如果是在Unity3D中使用,支持Windows 7 及以上版本,而独立的Windows SDK需要Windows 7 SP1及以上版本)

Mac OS X

Android 4.0 及以上版本

iOS 7.0 及以上版本

3D 引擎支持

Android/iOS GLES2

Unity 3D

未来更多(内嵌和外接)

Unity兼容性

EasyAR支持Unity4(4.6以上)和Unity5。

Graphics API

Windows: Direct3D9, Direct3D11, OpenGL2, OpenGLCore

Mac OS X: OpenGL2, OpenGLCore

Android: OpenGLES2

iOS: OpenGLES2


编译运行EasyAR的Unity样例


Pre-Requirements

Unity 4.6或更新版本

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

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

打开样例

首先你需要打开unity样例工程并打开样例中的场景。

Unity 4 如下图所示,

blob.png

而Unity 5 如下,

blob.png

使用Unity 5打开工程之后,需要按照Unity的说明升级工程。升级之后就可以正常使用,配置和Unity 4相同。

blob.png

输入Key

找到 ‘EasyAR’ object 并在inspector中输入‘Key’。如果key是非法的,程序初始化将会失败,可能显示黑屏。

 blob.png

按照下面的说明在TextArea 中填入Key。

blob.png

就是这么简单!现在就可以在包括Windows/Mac/Android/iOS所有平台上运行Unity 样例了。

XCode 配置

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

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

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

blob.png

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

 
blob.png

编译运行EasyAR的Android样例(非Unity)

EasyAR支持在Eclipse以及Android Studio 1.x 或 2.x版本中运行,以下配置适用于Android Studio 1.5及以上版本。在Android Studio 1.5 或2.0或2.1或以上版本中,按文章内方法导入并设置正确即可正常使用sample。在Android Studio 1.5以下及Eclipse中则需要更多设置,但需要配置的东西类似,只是配置的方法不同。

安装需求

JDK 1.7 或更新版本

Android Studio 1.5 或更新版本

Android NDK r10e

Android SDK with Build Tools 至少需要版本20.0.0

Android API 23 (可从Android SDK Manager中下载)

*推荐安装最新版本的NDK和SDK

如果你是第一次使用Android Studio,可以通过Android官方文档了解它

http://tools.android.com/tech-docs/new-build-system

对于Android Studio 1.3之后引入的NDK支持,可以参考

http://tools.android.com/tech-docs/android-ndk-preview

*根据官方的描述,Android Studio对NDK的支持很可能在接下去的几个版本中会有变化。我们会跟踪这些改变,并在Google发布新版本后更新我们的样例。我们可能不会更新随SDK一起发布的本文档。如果遇到最新版本Android Studio的问题,请到EasyAR网站查找最新样例代码。

*请注意, EasyAR SDK 是支持在Android Studio 1.4 和以下版本,以及Eclipse中引用和编译的。我们选择Android Studio 1.5 作为样例创建工具的原因是,对于同时支持Android Java代码和C++代码的集成配置和调试,它是目前最简单,设置最少的工具。

在Android Studio中打开样例文件夹

blob.png

如果这是你第一次使用Android Studio 应用于Gradle的实验插件,Android Studio 可能会需要一些时间来更新自身组件。

*你需要保持 “Android” 文件夹和“package” 文件存在,并保持它们的相对路径不变。

设置NDK位置

在打开工程之后,会看到如下错误信息。

blob.png

你可以点击错误信息中的链接使用如下方法设置本工程的NDK位置

blob.png

如果你在使用与工程配置中不同的Android API 或构建工具,可能会遇到如下错误信息

blob.png

为了解决这个问题,可以在Android SDK Manager中按照错误信息中提供的版本或者修改app文件夹中的build.gradle 文件,以匹配你现在所使用的版本。

blob.png

Key

根据下面说明设置key。

blob.png

运行

现在你就可以点击下图按钮,运行Android样例了。

blob.png

编译运行EasyAR的iOS样例(非Unity)

安装需求

XCode 6 或更新版本(我们在XCode 6.4和XCode 7.1中测试通过)

IPhone或IPad或其它真实Apple设备(EasyAR不支持在虚拟机上运行)

编译时需要选择device为“Generic iOS Device”或已连接的iOS移动设备。选择模拟器将无法编译。

打开XCode工程

blob.png

*你需要保持“iOS”文件夹和“package”文件存在,并保持它们的相对路径不变。

Key

根据下面说明设置key。

运行

现在你就可以点击下图按钮,运行iOS样例了。

配置EasyAR Unity SDK

Unity 4.6或更新版本

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

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

导入Package

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

初始化EasyAR

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

blob.png

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

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

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

如果你想看到和样例一样的输入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 Prefab和ImageTargetBaseBehaviour。

 

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就不需要了。

Graphics API(Android/iOS)

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

Unity 4.x 中设置如下

 

Unity 5.x 设置如下

 

XCode 配置(iOS)

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

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

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

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

 


更多关于EasyAR SDK增强现实引擎入门指南,请访问官网文档:http://www.easyar.cn/view/docs/


上一篇:没有了
下一篇:没有了
隐藏边栏