您的位置:首页 > 移动开发 > Unity3D

UNITY中如何在AR项目中动态的给ImageTag添加对象

2016-08-13 15:11 375 查看
Hello,我是KitStar

我是学习Unity的一名初级程序员。如果,一下文章整理的不对。还请见谅。

此篇教程教导我们如何在AR场景运行时实例化ImageTag下面的子对象,来进行目标检测。

如果你是初学者请跟着我的一下的步骤来操作:

1.打开Unity,并且创建一个基本的AR场景。(关于构建AR基本的场景,网上有大把的教程,这里就不累赘了)

2.假设我们要在运行时,才去创建一个ImageTag的自对象用来进行目标检测,那么首先,确保ImageTage底下没有自对象。

3.我们先去创建一个Prefab,作为后面运行时动态加载的临时对象,以演示给大家。

4.那么下来创建一个加载的脚本。此处为C#脚本。(脚本如下:)

using UnityEngine;

using System.Collections;

using Vuforia;      //此处必须引入高通的Vuforia命名空间

public class MyPrefabInstantiator : MonoBehaviour, ITrackableEventHandler   
//使用ITrackableEventHandler接口,此接口是个跟踪事件。在AR场景一运行的时候调用

{

    private TrackableBehaviour mTrackableBehaviour;     //用来获取ImageTarget的信息

    public Transform myModelPrefab;                   
//这个就
cf7b
是你要去操作的对象(也就是你想动态实例化的那个物品)

    // Use this for initialization

    void Start()

    {

        mTrackableBehaviour = GetComponent<TrackableBehaviour>();

        if (mTrackableBehaviour)

        {

            mTrackableBehaviour.RegisterTrackableEventHandler(this);   

            //如果找到TrackableBehaviour这个脚本,则把这个对象注册为他的目标

        }

    }

 

    public void OnTrackableStateChanged(     //改变跟踪对象的状态,一个以前状态,一个新状态

      TrackableBehaviour.Status previousStatus,

      TrackableBehaviour.Status newStatus)

    {

        if (newStatus == TrackableBehaviour.Status.DETECTED ||

            newStatus == TrackableBehaviour.Status.TRACKED ||

            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)

        //如果状态在跟踪或者已经检测到,或者扩大跟踪,则去指定跟踪对象,通过OnTrackingFound();

        {

            OnTrackingFound();

        }

    }

    private void OnTrackingFound()

    {

        if (myModelPrefab != null)

        {

            Transform myModelTrf = GameObject.Instantiate(myModelPrefab) as Transform;

            //去实例你想要的对象

            myModelTrf.parent = mTrackableBehaviour.transform;

            //设置他的父级

            myModelTrf.localPosition = new Vector3(0f, 0f, 0f);

            //设置他的位置

            myModelTrf.localRotation = Quaternion.identity;   //设置他的旋转

            myModelTrf.localScale = new Vector3(0.0005f, 0.0005f, 0.0005f);    //设置他的大小

            myModelTrf.gameObject.active = true;    //设置他的显示

        }

    }

}

5.然后把此脚本拖放到你指定的ImageTarget上。并且指定你要实例化的对象(即代码中的myModelPrefab)即可。

6.运行,你会发现你所指定的那个对象会动态加载在场景中的ImageTarget下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐