在unity3d中动态创建easyAR的imageTarget

来源:互联网 发布:燕郊招聘淘宝客服 编辑:程序博客网 时间:2024/05/22 03:26

首先说EasyAR中重要的几个概念:

ImageTargetBaseBehaviour:

是在AR场景中控制ImageTarget的component。
你需要设置ImageTargetBaseBehaviour为与target相关需要显示的3D内容的父节点。Augmenter与跟踪到的Target之间的相对位置(transform )是由EasyAR控制的。

为了使用ImageTargetBaseBehaviour(让tracker跟踪ImageTargetBaseBehaviour内部的target),你必须先使用图片或json设置(setup)这个component然后将这个ImageTargetBaseBehaviour加载到TrackerBaseBehaviour中。
通常有两种方法可以设置(setup)这个component。一个是设ActiveTargetOnStart为true然后设置一些变量(Name、Path、Size和Storage),加载操作将会在MonoBehaviour.Start中被调用。另一个方法是手动调用SetupWith*方法。你也可以在任意时间使用SetupWith*方法重新加载target。

在设置(setup)之后你需要把ImageTargetBaseBehaviour加载进TrackerBaseBehaviour。同样也有两种方法,一个是在SetupWith*调用或是MonoBehaviour.Start(当ActiveTargetOnStart为true的时候)之前Bind一个TrackerBaseBehaviour,然后ImageTargetBaseBehaviour会自动被加载进TrackerBaseBehaviour。另一种放方法是手动调用TrackerBaseBehaviour.LoadImageTargetBehaviour或者LoadIntoTrackerBehaviour。

ImageTrackerBaseBehaviour:

(since 1.3.0) 是在AR场景中控制ImageTracker的component。
ImageTargetBaseBehaviour必须先被加载到ImageTrackerBaseBehaviour中它内部的target才能被跟踪。

动态创建代码如下(参考官方demo helloARTarget):

  void CreateTarget(string targetName, out EasyImageTargetBehaviour targetBehaviour)        {            GameObject Target = new GameObject(targetName);            Target.transform.localPosition = Vector3.zero;            targetBehaviour = Target.AddComponent<EasyImageTargetBehaviour>();        }void Start()        {            EasyImageTargetBehaviour targetBehaviour;            //发现一个ImageTrackerBehaviour,用来跟踪识别imageTarget的。前提是这个ImageTrackerBehaviour必须被添加到了一个object中,否则就得用新建            ImageTrackerBehaviour tracker = FindObjectOfType<ImageTrackerBehaviour>();            // dynamically load from image (*.jpg, *.png)            CreateTarget("argame01", out targetBehaviour);            //绑定一个tracker,必须绑定了,才能被tracker追踪,然后识别里面的target。            targetBehaviour.Bind(tracker);            targetBehaviour.SetupWithImage("sightplus/argame01.jpg", StorageType.Assets, "argame01", new Vector2());            //从Resource中加载prefabs            GameObject duck02_1 = Instantiate(Resources.Load("duck02")) as GameObject;            //识别出图片后,让模型的坐标跟着imagetarget object的坐标走            duck02_1.transform.parent = targetBehaviour.gameObject.transform;}

静态模型就是通过拖动实现的如下图:
这里写图片描述

其实里面的组件都是有与之对应的代码的。显示到界面上的属性都是public的,可以拖动。

在视图中新建一个3d模型实例,就对应代码中的

GameObject Target = new GameObject(targetName);

加载代码中已有的prefabs如下:

prefab只是一个文件,不会出现在游戏场景里。
prefab只有两种使用方法,一是在代码里调用Instantiate;另一种是拖到场景里产生一个和他关联的物体(在Hierarchy里显示蓝色)。
具体参考:http://blog.csdn.net/onafioo/article/details/40115515

GameObjectduck02_1 = Instantiate(Resources.Load("duck02"))asGameObject;

给模型添加一个组件就相当于代码中的

targetBehaviour = Target.AddComponent<EasyImageTargetBehaviour>();

让模型的坐标跟着imagetarget object的坐标走:

duck02_1.transform.parent = targetBehaviour.gameObject.transform;

相当于把duck02_1这个gameObject拖放到了targetBehaviour.gameObject(ImageTarget)下面.

阅读全文
0 0