EasyAR(一)——显示模型

一、开发环境:unity5.6.0,EasyAR2.1


二、导入SDK

1.安装unity并被配置androidSDK跟javaJDK路径(见博客环境配置)

2.从EasyAR官网下载EasyAR(这里下载的是EasyAR2.0)下载网址http://www.easyar.cn/view/download.html


3.新建unity项目,命名随意


4.将下载的EasyAR文件解压,解压之后有一个文件夹和一个pakage包,将EasyAR_SDK_2.1.0_Basic.unitypackage

导入至建好的unity项目中,效果如图:


三、配置识别图

1.在unity里新建一个目录,命名为"StreamingAssets",准备一张需要识别的图片(格式最好为jpg),拖入StreamingAssets文件夹中,给图片命名为“idback”



2.EasyAR Target配置

详见官网http://www.easyar.cn/doc/EasyAR%20SDK/Guides/EasyAR-Target-Configure.html

在StreamingAssets目录下新建一个json文件,命名为“targets”这里格式如下:

{
  "images" :
  [
    {
      "image" : "idback.jpg",
      "name" : "idback",
      "size" : [8.56, 5.4],
      "uid" : "uid-string, should NOT duplicate",
      "meta" : "what ever string you like."
    }
  ]
}
四、获取key

1.进入官网http://www.easyar.cn/view/open/app.html申请key


2.点击创建应用,应用名称输入你的项目名字,bundleid(package name)处填写   .com+playersettings处的CompanyName+playersettings处的ProductName



2.填入完成后确定即可查看我们需要的key


3.按你用的EasyAR版本选择查看key,这里用的2.1所以


4.复制此处的key


五、开发

1.回到刚刚创建的unity项目中,删除原有场景中的MainCamera,然后从EasyAR->Prefabs将预制件EasyAR_Startup拖入到Hierarchy面板


2.将刚刚复制的key黏贴到"EasyAR_Startup"中


3.从EasyAR->Prefabs->Primitives中的预制件ImageTarge拖入到Hierarchy面板中


4.编辑挂在ImageTarget组件上的“ImageTargetBehaviour”脚本(这个段脚本的主要功能是当捕捉到识别图时控制模型的显示与消失),在这里我直接移除了ImageTargetBehaviour,新建了个脚本继承ImageTargetBehaviour(单纯因为新建个脚本看着比较开心,这个看个人习惯是直接在上面编辑还是新建个脚本),具体内容如下:

namespace EasyAR
{
    public class TargetDemo : ImageTargetBehaviour
    {


        protected override void Awake()
        {
            base.Awake();
            TargetFound += OnTargetFound;
            TargetLost += OnTargetLost;
            TargetLoad += OnTargetLoad;
            TargetUnload += OnTargetUnload;
        }

        

        protected override void Start()
        {
            base.Start();
           // HideObjects(transform);
            //TargetAbstractBehaviour.
            GameObjectActiveControl = false;
        }

        //void HideObjects(Transform trans)
        //{
        //    for (int i = 0; i < trans.childCount; ++i)
        //        HideObjects(trans.GetChild(i));
        //    if (transform != trans)
        //        gameObject.SetActive(false);
        //}

        //void ShowObjects(Transform trans)
        //{
        //    for (int i = 0; i < trans.childCount; ++i)
        //        ShowObjects(trans.GetChild(i));
        //    if (transform != trans)
        //        gameObject.SetActive(true);
        //}

        private void OnTargetLost(TargetAbstractBehaviour obj)
        {
            GameObjectActiveControl = true;
            Debug.Log("Found: " + Target.Id);
        }

        private void OnTargetFound(TargetAbstractBehaviour obj)
        {
            GameObjectActiveControl = false;
            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);
        }
    }
}
因为EasyAR的版本不一样,API接口可能不太一样,2.1是不需要去写显示跟隐藏的方法了,直接通过控制GameObjectActive的值来显示隐藏模型,其他版本可能需要写显示隐藏方法,显示隐藏方法,我在上面注释了,具体关于API问题可以去查看每个版本的配置EasyAR Unity SDK文档,例如EasyAR2.1查看地址为: http://www.easyar.cn/doc/EasyAR%20SDK/Getting%20Started/2.0/Setting-up-EasyAR-Unity-SDK.html

EasyAR1.0查看地址为:http://www.easyar.cn/doc/EasyAR%20SDK/Getting%20Started/1.0/Setting-up-EasyAR-Unity-SDK.html
5.在Hierarchy面板放入你需要显示的模型,并设成ImageTargert的子物体,然后将模型的transform reset


6.在Inspector面板填写ImageTarget信息


按json文件填入配置path、name、size

注意:Storage处需要修改为Assets



新建个材质球,将识别图idback复制另存一份png格式图(不用放在StreamAssets文件夹),作为贴图放入材质球,将材质球放入如下图地方



六、测试

1.将当前场景保存

2.File->BuildSettings,将保存场景拖入BuildSettings面板中,确定面板如下


保证框选区域如图(场景名不必一样),确定无误后,点击PlayeSettings,按照申请key时填入的信息填入下面


Package Name:填入申请key时的BundleID

Company Name:与申请Key时的公司或团队名相同,就是.com中间那个

Product Name:与申请key时填入的应用名相同,就是.com末尾那个

最后需要设置GraphicAPI,unity4.x跟unity5.x设置是不一样的

unity4.x:将Graphic设置为force Open GL ES 2.0,Graphics API设置为 Open GL ES 2.0(没有4.x没有截图)

unity5.x:如下图


最后build生成app,放到手机安装测试就可以了

EasyAR 并不直接提供语音识别功能,但是你可以使用 Unity 的插件 SpeechRecognizer 实现安卓平台上的语音识别,并将识别结果与 EasyAR 的 AR 应用进行交互。 以下是一个简单的示例代码,演示如何将语音识别结果与 EasyAR 的 AR 应用进行交互: ```csharp using UnityEngine; using System.Collections; using UnityEngine.Android; using EasyAR; public class SpeechRecognition : MonoBehaviour { // EasyAR ARCamera 对象 public ARCamera arCamera; // 关键字 public string keyword = "hello"; // 识别结果 private string result = ""; void Start() { // 请求录音权限 #if UNITY_ANDROID if (!Permission.HasUserAuthorizedPermission(Permission.Microphone)) { Permission.RequestUserPermission(Permission.Microphone); } #endif // 创建 SpeechRecognizer 对象 AndroidJavaObject recognizer = new AndroidJavaObject("com.unity3d.player.UnitySpeechRecognizer"); // 开始识别 recognizer.Call("start", keyword); // 获取识别结果 result = recognizer.Call<string>("getResult"); } void Update() { // 如果识别结果为 "hello",则在 EasyAR 显示一个 Cube if (result == "hello") { var obj = Instantiate(Resources.Load<GameObject>("Cube")); obj.transform.parent = arCamera.transform; obj.transform.localPosition = new Vector3(0, 0, 500); result = ""; } } void OnGUI() { // 显示识别结果 GUILayout.Label("Result: " + result); } } ``` 在上面的代码,我们首先请求录音权限,然后创建 SpeechRecognizer 对象,并使用关键字 "hello" 开始识别。在 Update 函数,如果识别结果为 "hello",则在 EasyAR 显示一个 Cube。最后,我们获取识别结果,并在界面上显示出来。 需要注意的是,SpeechRecognizer 插件只能在 Android 平台上使用,而且需要在 AndroidManifest.xml 文件添加相应的权限声明。 希望这个简单的示例能够帮助你实现 EasyAR 的语音识别
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值