Unity使用Vuforia实现AR脱卡功能
程序员文章站
2022-03-18 16:51:26
AR脱卡功能话不多说,思路如下实现脱卡功能主要是改变官方原脚本里的OnTrackingLost()这个方法在识别图丢失的时候不进行销毁,而是将他放置在合适的位置,用ARCamera来渲染丢失的模型在网上也有许多脱卡的讲解,,如Vuforia入门学习笔记 —— 三种脱卡方法,我这里用的是他的第三种脱卡方法,然后进行了一些改动主要代码:OnTrackingFound() protected virtual void OnTrackingFound() { // TrackOb...
AR脱卡功能
话不多说,思路如下
实现脱卡功能主要是改变官方原脚本里的OnTrackingLost()这个方法
在识别图丢失的时候不进行销毁,而是将他放置在合适的位置,用ARCamera来渲染丢失的模型
在网上也有许多脱卡的讲解,,如Vuforia入门学习笔记 —— 三种脱卡方法,我这里用的是他的第三种脱卡方法,然后进行了一些改动
- 主要代码:
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);
}
- 搭场景
做一个预制体,将TrackObject脚本放置上,然后将场景里的模型删除
将这个预制体拖入prefabs
3. 运行
4. 总结
直接使用ARCamera渲染脱卡后的模型
注:做好的prefabs可以放在Resources文件夹下,因为生成APP时Resources文件夹下的文件是直接压缩并包含在平台可执行文件中。但是,Resources下的内容过多会导致内存占用量大并且耗时,卡顿。关于Resources文件夹—>Unity资源管理(二)-Resources文件夹
本人的学习经验,有地方不足或者不对的地方请指正
本文地址:https://blog.csdn.net/weixin_45950520/article/details/107330376