Unity使用Vuforia实现AR脱卡功能

AR脱卡功能
话不多说,思路如下
实现脱卡功能主要是改变官方原脚本里的OnTrackingLost()这个方法
在识别图丢失的时候不进行销毁,而是将他放置在合适的位置,用ARCamera来渲染丢失的模型

在网上也有许多脱卡的讲解,,如Vuforia入门学习笔记 —— 三种脱卡方法,我这里用的是他的第三种脱卡方法,然后进行了一些改动

  1. 主要代码:

OnTrackingFound()

 protected virtual void OnTrackingFound()
    {
    	// TrackObject-------->> class TrackObject
    	// 这里的TrackObject为另外一个挂载于脱卡对象上的脚本
        TrackObject[] objects = FindObjectsOfType<TrackObject>();
        foreach (TrackObject to in objects)
        {
            Destroy(to.gameObject);
        }
        //卸载无用资源
        Resources.UnloadUnusedAssets();

        //加载需要现实的模型,并实例化到场景中
        //prefabs ------>> public GameObject prefabs;
        //注:此处的prefabs为已经做好的模型预制体
        GameObject obj = GameObject.Instantiate(prefabs) as GameObject;

        //将父物体设置为 ImageTarget
        obj.transform.parent = this.transform;
        //设置该物体的物体位置
        obj.transform.position = this.transform.position;

        isFirst = true;
    }

OnTrackingLost()

protected virtual void OnTrackingLost()
    {
        //、从子物体中获取所有TrackObject组件
        TrackObject to = GetComponentInChildren<TrackObject>();

        if (to != null && isFirst)
        {
        	//将模型从ImageTarget下移出
            to.transform.parent = this.transform.parent;
			//设置模型位置,旋转角
			//LoatPosition ------->> calss TrackObject ---> public Vector3 LostPosition  
            to.transform.position = to.LostPosition;
            to.transform.localRotation = Quaternion.Euler(Vector3.zero);
        } 
    }

到这里,已经把原始的识别与丢失的方法更改完成
然后创建TrackObject脚本

public class TrackObject : MonoBehaviour
{
	//调整位置,将做好的预制体放入场景,于game界面查看,并将模型调整为需要的位置
    public Vector3 LostPosition = new Vector3(xxxf, xxxf, xxxf);
}
  1. 搭场景

做一个预制体,将TrackObject脚本放置上,然后将场景里的模型删除
将这个预制体拖入prefabs
picture
3. 运行
4. 总结
直接使用ARCamera渲染脱卡后的模型

注:做好的prefabs可以放在Resources文件夹下,因为生成APP时Resources文件夹下的文件是直接压缩并包含在平台可执行文件中。但是,Resources下的内容过多会导致内存占用量大并且耗时,卡顿。关于Resources文件夹—>Unity资源管理(二)-Resources文件夹

本人的学习经验,有地方不足或者不对的地方请指正

你可能感兴趣的:(unity3D,unity,AR,Vuforia,Unity,高通,安卓,Unity,Vuforia)