《AR与VR开发实战》——第3章 AR内容交互 3.1 动态加载AR模型

本节书摘来自华章出版社《AR与VR开发实战》一书中的第章,第3.1节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问“华章计算机”公众号查看。

3.1 动态加载AR模型

在第2章中我们实现了通过Vufoira默认方式识别并显示三维模型。默认的加载模型是通过将3D物体直接放置在场景中并作为识别目标的子物体来实现的,这种实现方式的问题是,当场景中有很多识别目标后,需要一次性加载的模型内容会占用很大的内存。因此,在实际项目案例中需要动态加载识别目标对应的模型,在识别丢失之后删除模型,这样可以保证同一时刻内存的占用是手机可以承受的。
本节将通过预制件实例化的方式实现AR模型的动态加载和显示。
1.创建预制件
将ImageTarget下调整好的模型拖到最上层,和ImageTarget在层级视图中保持平级关系。

在Assets目录中创建Resources文件夹,并将层级视图Hierarchy中的模型Sphere拖至Resources文件夹中,然后删除层级视图Hierarchy中的Sphere模型。

2.为需要加载的预制件添加脚本
在工程视图Project中创建一个新的C#脚本,命名为TrackObject.cs,该脚本是为了更方便地找到识别后显示的物体,将其拖到需要加载的预制件上。
在工程视图Project中找到DefaultTrackableEventHandler.cs这个脚本,按住Ctrl+D可以
复制一份相同的脚本,选中新复制出来的脚本并按F2快捷键将脚本改名为MyTrackable EventHandler.cs。然后双击打开,将类名修改为MyTrackableEventHandler,找到监听识别成功和识别丢失的两个方法OnTrackingFound和OnTrackingLost,默认代码如下:
//识别成功时调用的方法

private void OnTrackingFound()
{
    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
    // Enable rendering:
    foreach (Renderer component in rendererComponents)
    {
        component.enabled = true;
    }
    // Enable colliders:
    foreach (Collider component in colliderComponents)
    {
        component.enabled = true;
    }
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");

}

//识别丢失时调用的方法
private void OnTrackingLost(){

Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
    component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
    component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");

}
在默认的这两个方法实现中,OnTrackingFound函数在识别图像成功之后被调用,OnTrackingLost函数在识别丢失之后被调用。该脚本利用了查找当前识别目标所有子物体的渲染器Renderer组件,通过其打开或关闭来实现3D物体的显示和隐藏。现在我们通过动态加载的方式来显示3D模型,需要删除OnTrackingLost和OnTrackingFound两个函数中的内容,并将代码修改为动态加载的方式实现:
//识别成功时调用的方法
private void OnTrackingFound()
{

//动态加载模型并实例化到场景中
GameObject obj = GameObject.Instantiate(Resources.Load("Sphere")) as GameObject;
//生成之后设定它的父级为识别图物体
obj.transform.parent = this.transform;
//设定物体与识别图在同一位置,这里可以根据需求设定
obj.transform.position = this.transform.position;    

}

//识别丢失时调用的方法
private void OnTrackingLost()
{

//从子物体中查找所有TrackObject组件
TrackObject to=GetComponentInChildren<TrackObject>();
//如果找到显示物体,则销毁物体并释放无用资源
if (to != null)
{
    Destroy(to.gameObject);
    Resources.UnloadUnusedAssets();
}

}
3.效果实现
选择ImageTarget,在Inspector面板上选择Remove Component,并将DefaultTrackable EventHandler脚本移除,同时把MyTrackableEventHandler脚本添加到ImageTarget上。

最后,点击运行以测试最终效果,如下图所示。

以上为动态加载AR中3D物体的步骤和方法。

时间: 2025-01-29 09:34:09

《AR与VR开发实战》——第3章 AR内容交互 3.1 动态加载AR模型的相关文章

《AR与VR开发实战》——第1章AR技术简介

本节书摘来自华章出版社<AR与VR开发实战>一书中的第1章,第1.1节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 第1章 AR技术简介 增强现实(Augmented Reality,AR)是一种实时计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界中并进行互动.这种技术于20世纪90年代提出,随着随身电子产品运算能力的提升,其用途将会越来越广.目前对于增强现实有两种通用的定义.一种定义是北卡大学罗

《AR与VR开发实战》——3.3 手势控制

本节书摘来自华章出版社<AR与VR开发实战>一书中的第3章,第3.3节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 3.3 手势控制 目前市场上流行的AR产品以儿童教育类产品居多,这些产品中大多会有手势交互的功能,本节就将讲解如何在AR产品中加入手势交互的功能.设想以下场景,在识别一个动物的卡片后,会出现该动物的3D立体影像,在识别丢失后,动物模型会停留在屏幕中心,并可以通过手势控制其旋转和缩放.我们需要实现模型脱卡的功能,这个功能的实现已经

《AR与VR开发实战》——2.7 3D物体识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.7节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.7 3D物体识别 2.5节和2.6节讲解了柱体识别和立方体识别,这两节的内容都只是针对简单几何体进行识别,在本节中,我们将介绍不规则三维物体的识别步骤和方法.1.下载并导入插件登录官网,点击Downloads下的Tools,下载Vuforia Object Scanner (Vuforia物体扫描器).Vuforia Obj

《AR与VR开发实战》——2.11 帧标记识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.11节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.11 帧标记识别 在使用Vuforia进行开发时,我们总是强调识别图的识别度星级越高,越容易识别.那么假如在商业项目中,客户要使用的识别图的识别星级为0,该怎么办呢?这就是FrameMarker大展拳脚的时候了.本节我们将为大家介绍一个名叫FrameMaker的神奇功能.1.插件下载访问https://developer.

《AR与VR开发实战》——3.2 模型脱卡功能的实现

本节书摘来自华章出版社<AR与VR开发实战>一书中的第3章,第3.2节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 3.2 模型脱卡功能的实现 在常见的AR项目中,识别到图像后会将3D物体叠加到识别目标之上并具有追踪效果,但是当识别目标丢失后,我们希望能够将3D模型停留在屏幕中心,并能够和用户进行交互,比如点击模型伴随动画切换.播放语音讲解等一系列功能.这个功能就是我们本节将要为大家介绍的脱卡功能.脱卡实现的原理是,将3D物体从识别目标下移出

《AR与VR开发实战》——2.5 柱形识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.5节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.5 柱形识别 Vuforia SDK提供了带有图像的柱形物体识别功能,柱形识别只针对柱形物体,配合包裹在柱体表面的图像来进行识别,比如识别饮料瓶.本节将介绍柱形识别的实现步骤和方法. Vuforia官方案例包登录Vuforia官网,进入Downloads页面,点击Samples选项,然后下载如下插件并解压. 在解压完成后找到

《AR与VR开发实战》——2.8 云识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.8节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.8 云识别 在开发项目的过程中,当我们需要将识别图放置在服务器后台而不是App内部的时候,需要使用Vuforia的云识别功能,在本节中,我们将介绍Vuforia云识别的实现步骤和方法.1.创建License Key登录Vuforia开发者官网,点击Develop,在License Manager下面创建一个License K

《AR与VR开发实战》——2.3 创建AR视频

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.3节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.3 创建AR视频 本节将介绍AR视频的创建,AR视频即识别某张图像并播放与所识别图像对应的视频文件,一般用于企业宣传册.广告.书籍等相关领域.我们将会继续使用Unity和Vuforia SDK来开发AR视频应用,关于Vuforia SDK的相关配置可参阅前面的章节.Unity默认支持的视频格式分别有.mov..mpg..mp

《AR与VR开发实战》——2.4 文字识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.4节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.4 文字识别 本节介绍如何使用Vuforia和Unity实现文字识别功能.Vuforia对文字识别有一定的要求,首先,Vuforia能够识别的文字大多为英文,不能识别数字和中文.其次,默认能够识别的英文单词必须是官方词库中的单词(10万个),当然,还可以自定义添加英文单词.接下来我们通过Vuforia官方自带的案例来看一下文