开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   碎碎

高通AR,多图脱卡识别

个人分类: Vuforia+Unity | 2017-4-20 15:33
标签:高通 多图脱卡
单图脱卡会了,多图脱卡呢?我所写的是在资源导入项目,搭建完场景之后所要做的。
第一步:创建一个新的脚本 MyTrackableEventHandler.cs ,替换Vuforia自带的 DefaultTrackableEventHandler.cs
using UnityEngine;
using Vuforia;
namespace Vuforia
{
    /// <summary>
    /// A custom handler that implements the ITrackableEventHandler interface.
    /// </summary>
    public class MyTrackableEventHandler : MonoBehaviour,ITrackableEventHandler
    {
           #region PRIVATE_MEMBER_VARIABLES
            private TrackableBehaviour mTrackableBehaviour;
        //判断是否第一张已经显示了
        bool isFirstFound=false;
    
            #endregion // PRIVATE_MEMBER_VARIABLES
            #region UNTIY_MONOBEHAVIOUR_METHODS
            void Start()
            {
            //列表保存全部图片
            Manager.instance.allImgTgt.Add(this.transform);
            HideImgTgt(); //先隐藏全部
                mTrackableBehaviour = GetComponent<TrackableBehaviour>();
                if (mTrackableBehaviour)
                {
                    mTrackableBehaviour.RegisterTrackableEventHandler(this);
                }
            }
            #endregion // UNTIY_MONOBEHAVIOUR_METHODS
            #region PUBLIC_METHODS

            /// <summary>
            /// Implementation of the ITrackableEventHandler function called when the
            /// tracking state changes.
            /// </summary>
            public void OnTrackableStateChanged(
                TrackableBehaviour.Status previousStatus,
                TrackableBehaviour.Status newStatus)
            {
                if (newStatus == TrackableBehaviour.Status.DETECTED ||
                    newStatus == TrackableBehaviour.Status.TRACKED ||
                    newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
                {
                  isFirstFound=true;
                //判断是否丢失
                Manager.instance.lost=false;
                //判断名字是否一样,不一样了隐藏之前的,显示现在的
                  if(Manager.instance.lastTrackName==mTrackableBehaviour.TrackableName)
                      {
                        return;
                      }
                   else
                      {
                        Manager.instance.HideAllImg();
                          ShowImgTgt();
                        }
                }
                else
                {
                if(isFirstFound)
                {
                    //前面刚显示过的Img的子物体名字
                    Manager.instance.lastTrackName=mTrackableBehaviour.TrackableName;
                    Manager.instance.lost=true;
                }
                }
            }

        //显示
        void  ShowImgTgt()
        {
            foreach (Transform child in this.transform) {
                child.gameObject.SetActive(true);
            }
        }
        //隐藏
        public void  HideImgTgt()
        {
            foreach (Transform child in this.transform) {
                child.gameObject.SetActive(false);
            }
        }
            #endregion // PUBLIC_METHODS
    }
}

第二步:新建一个脚本Manager.cs,挂在空对象上
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Vuforia;

/// <summary>
/// 控制类,挂在空物体上
/// </summary>
public class Manager : MonoBehaviour {

    public static Manager instance;
    public List<Transform> allImgTgt=new List<Transform>();
    public string lastTrackName="";
    public bool lost=false;
//相机的位置,在这里照到的物体位于屏幕中间,可以调整之后再写入数据  
    Vector3 lastCamPos=Vector3.zero;
    Transform ARCamera;
    void Awake()
    {
        instance=this;
        ARCamera=GameObject.Find("ARCamera").transform;
    }
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        if(lost)
        {
            ARCamera.localPosition=lastCamPos;
            ARCamera.localRotation=Quaternion.Euler(Vector3.zero);
        }
    }
    public void HideAllImg()
    {
        foreach (Transform imgTgt in allImgTgt) {
            imgTgt.GetComponent<MyTrackableEventHandler>().HideImgTgt();
        }
    }
}
该文章是听章鱼哥的AR多图脱卡识别的视频而写,附上视频网址:https://v.qq.com/x/page/u0378anvm7a.html
0 0

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部