Vuforia 收藏本版 已有9人收藏 +发表新主题
查看: 31656|回复: 2
打印 上一主题 下一主题

[分享] 如何动态加载模型资源并且将模型资源赋予某一个ImageTarget

[复制链接]

[分享] 如何动态加载模型资源并且将模型资源赋予某一个ImageTarget

yanjianghao 发表于 2016-2-17 16:06:46 浏览:  31656 回复:  2 只看该作者 复制链接
本文介绍了如何增加一个定制的3D模型实例化时图像的目标,根据目标检测,使用Vuforia在Unity中的延伸和预置实例化技术。
步骤:
1.创建一个Unity项目,导入ImageTarget,打开ImageTarget场景。
2.让我们假设,为了便于参考,我们要动态地在运行时添加一个自定义的三维模型的“chips”的ImageTarget。
3.选择“chips”,消除场景中的茶壶3D模型,这样ImageTarget下没有子物体。
4.在项目视图中, 在Assets文件夹下创建一个Prefabs(如果你没有)。
5.添加一个预设物体到Prefabs;有许多方法可以创建制定的预设对象;例如,你可以创建你的场景视图的一个简单的游戏对象,然后拖动它从场景到预设的文件夹在项目视图;或者,你可以导入支持Unity的3D模型。
6.创建一个C#脚本,叫 MyModelInstantiator。并将它附到“chips”下。
7.把下面的代码放入脚本中并保存它:
using UnityEngine;
using System.Collections;
using Vuforia;

public class MyPrefabInstantiator : MonoBehaviour, ITrackableEventHandler
{
private TrackableBehaviour mTrackableBehaviour;
public Transform myModelPrefab;
// Use this for initialization
void Start ()
{
mTrackableBehaviour = GetComponent();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}

public void onTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
onTrackingFound();
}
}
private void onTrackingFound()
{
if (myModelPrefab != null)
{
Transform myModelTrf = GameObject.Instantiate(myModelPrefab) as Transform;
myModelTrf.parent = mTrackableBehaviour.transform;
myModelTrf.localPosition = new Vector3(0f, 0f, 0f);
myModelTrf.localRotation = Quaternion.identity;
myModelTrf.localScale = new Vector3(0.0005f, 0.0005f, 0.0005f);
myModelTrf.gameObject.active = true;
}
}
}
8.正如你可以从代码中看到的,MyModelInstantiator类实现了 ITrackableEventHandler接口,所以它被调用时,检测到目标。预制的3D模型实例化,并且附到ImageTarget下,3D模型大小和位置都调整过,因此可以很漂亮的增强在目标上。(请调整好你需要模型的位置,旋转和缩放)
9.另外,脚本中包含一个公共变量叫做MyPrefabModel,如果你现在回到Unity场景中点击ImageTarget,在属性窗口下,你会看到MyModelInstantiator脚本所在的物体中多了一个叫做My Prefab Model的文件,选择你的Prefab,将它拖到My Prefab Model。
10.保存场景并运行,当扫到识别图时,你预设的3D模型就会显示出来。

Ps:如果模型的大小是太小或太大,去脚本代码中调整localScale的值。如果要展示的模型过多,推荐使用这种方法。
分享至:
| 人收藏
回复

使用道具 举报

该用户从未签到

沙发
YangXueping 发表于 2017-2-7 10:47:20 只看该作者
您好,此例程可以实现动态的加载模型,怎么实现多个ImageTarget对应多个模型?
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
YangXueping 发表于 2017-2-10 10:44:21 只看该作者
您好,请教一下。按照您的说明第5步,当导入fbx外部模型时,同样的添加控制脚本,但是识别的时候不显示此模型,是为什么?
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.