142
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 福州大学软件工程W班 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 介绍如何使用Vuforia在Unity中动态展示不同模型 |
| 其他参考文献 | 无 |
当我们在进行Unity的AR镜头开发时,一般都会使用到Vufoira引擎来进行AR识别和模型展示,但是一般只会展示你固定在项目中的ImageTarget下的模型,而根据不同用户场景展示不同模型却成为了问题。所以本文会介绍如何借助Vufoira使用AR镜头以及如何动态展示不同模型。
使用技术:Unity2019、Vuforia、C#
解决的问题:Vufoira的基本使用、Vufoira环境下模型的动态展示








那么问题来了,如果我需要根据不同的用户场景展示不同的模型怎么办呢?
有一种方法就是,我有几个模型,我就设置几个ImageTarget,根据不同的识别物,来识别不同的NPC,但是这就会导致一个场景中有许多ImageTarget,性能下降不说,而且每一个模型需要不同的识别图片,导致找高质量的识别图片以及绑定工作成倍上升。
那么有没有一种方法,可以只输入一个变量,同一个ImageTarget根据这个变量来动态显示不同的模型呢?官方角度来说是没有的,而且ImageTarget只会傻乎乎加载他的所有子物体。
但虽然官方没有这样的方法,但是却留下了默认的脚本类,我们可以通过继承修改其中脚本类的方法来实现我们的想法。

NpcModel = Resources.Load("Prefab/Model/" + "你想要加载的模型的名字") as GameObject;
NpcModel = Instantiate(NpcModel);
NpcModel.transform.parent = this.transform.Find("Empty"); //挂载到ImageTarget的子物体Empty下
NpcModel.transform.rotation = Quaternion.Euler(0f, 180f, 0f); //调整方向
//执行一次刷新动作
base.OnTrackingLost();
using PixelCrushers.DialogueSystem;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class MyDefaultTrackableEventHandler : DefaultTrackableEventHandler
{
private GameObject NpcModel;
protected override void Start()
{
base.Start();
NpcModel = Resources.Load("Prefab/Model/" + "你想要加载的模型的名字") as GameObject;
NpcModel = Instantiate(NpcModel);
NpcModel.transform.parent = this.transform.Find("Empty"); //挂载到ImageTarget的子物体Empty下
NpcModel.transform.rotation = Quaternion.Euler(0f, 180f, 0f); //调整方向
//将目标NPC绑到静态AR相机数据集中
ARCameraStaticData.NpcModel = NpcModel;
//执行一次刷新动作
base.OnTrackingLost();
}
}
这是我的项目中的代码实例,其中的StaticData就是用来存放当前用户场景要加载哪个NPC模型的id的,这样当当前AR镜头被唤醒时就可以根据用户环境动态加载不同NPC模型而达到代码简易,性能优良的效果。

效果展示(同一场景同一ImageTarget同一识别物不同用户场景不同NPC)


通过上述方式进行AR场景中模型的动态展示,既可以免去实现多个ImageTarget甚至多个场景的繁琐操作,也不会被一个ImageTarget导致场景性能场景降低而苦恼。同时还便于拓展出不同的模型NPC,只需要做的操作就是将新模型添加到Model文件夹中然后修改好对应的名字,就可以了,无需更多操作。
| 标题 | 作者 |
|---|---|
| Vuforia的各种Target的简单介绍(包括地面识别) | SaFuFuの绝世 |
| 手把手带你做AR应用(包含预定义目标识别,自定义目标识别,模型动画和视频播放) | 酸菜一汤 |