欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity使用Vuforia实现AR脱卡功能

程序员文章站 2022-03-18 16:51:26
AR脱卡功能话不多说,思路如下实现脱卡功能主要是改变官方原脚本里的OnTrackingLost()这个方法在识别图丢失的时候不进行销毁,而是将他放置在合适的位置,用ARCamera来渲染丢失的模型在网上也有许多脱卡的讲解,,如Vuforia入门学习笔记 —— 三种脱卡方法,我这里用的是他的第三种脱卡方法,然后进行了一些改动主要代码:OnTrackingFound() protected virtual void OnTrackingFound() { // TrackOb...

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
Unity使用Vuforia实现AR脱卡功能
3. 运行
4. 总结
直接使用ARCamera渲染脱卡后的模型

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

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

本文地址:https://blog.csdn.net/weixin_45950520/article/details/107330376