UNITY中如何在AR项目中动态的给ImageTag添加对象
2016-08-13 15:11
375 查看
Hello,我是KitStar。
我是学习Unity的一名初级程序员。如果,一下文章整理的不对。还请见谅。
此篇教程教导我们如何在AR场景运行时实例化ImageTag下面的子对象,来进行目标检测。
如果你是初学者请跟着我的一下的步骤来操作:
1.打开Unity,并且创建一个基本的AR场景。(关于构建AR基本的场景,网上有大把的教程,这里就不累赘了)
2.假设我们要在运行时,才去创建一个ImageTag的自对象用来进行目标检测,那么首先,确保ImageTage底下没有自对象。
3.我们先去创建一个Prefab,作为后面运行时动态加载的临时对象,以演示给大家。
4.那么下来创建一个加载的脚本。此处为C#脚本。(脚本如下:)
using UnityEngine;
using System.Collections;
using Vuforia; //此处必须引入高通的Vuforia命名空间
public class MyPrefabInstantiator : MonoBehaviour, ITrackableEventHandler
//使用ITrackableEventHandler接口,此接口是个跟踪事件。在AR场景一运行的时候调用
{
private TrackableBehaviour mTrackableBehaviour; //用来获取ImageTarget的信息
public Transform myModelPrefab;
//这个就
cf7b
是你要去操作的对象(也就是你想动态实例化的那个物品)
// Use this for initialization
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
//如果找到TrackableBehaviour这个脚本,则把这个对象注册为他的目标
}
}
public void OnTrackableStateChanged( //改变跟踪对象的状态,一个以前状态,一个新状态
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
//如果状态在跟踪或者已经检测到,或者扩大跟踪,则去指定跟踪对象,通过OnTrackingFound();
{
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; //设置他的显示
}
}
}
5.然后把此脚本拖放到你指定的ImageTarget上。并且指定你要实例化的对象(即代码中的myModelPrefab)即可。
6.运行,你会发现你所指定的那个对象会动态加载在场景中的ImageTarget下。
我是学习Unity的一名初级程序员。如果,一下文章整理的不对。还请见谅。
此篇教程教导我们如何在AR场景运行时实例化ImageTag下面的子对象,来进行目标检测。
如果你是初学者请跟着我的一下的步骤来操作:
1.打开Unity,并且创建一个基本的AR场景。(关于构建AR基本的场景,网上有大把的教程,这里就不累赘了)
2.假设我们要在运行时,才去创建一个ImageTag的自对象用来进行目标检测,那么首先,确保ImageTage底下没有自对象。
3.我们先去创建一个Prefab,作为后面运行时动态加载的临时对象,以演示给大家。
4.那么下来创建一个加载的脚本。此处为C#脚本。(脚本如下:)
using UnityEngine;
using System.Collections;
using Vuforia; //此处必须引入高通的Vuforia命名空间
public class MyPrefabInstantiator : MonoBehaviour, ITrackableEventHandler
//使用ITrackableEventHandler接口,此接口是个跟踪事件。在AR场景一运行的时候调用
{
private TrackableBehaviour mTrackableBehaviour; //用来获取ImageTarget的信息
public Transform myModelPrefab;
//这个就
cf7b
是你要去操作的对象(也就是你想动态实例化的那个物品)
// Use this for initialization
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
//如果找到TrackableBehaviour这个脚本,则把这个对象注册为他的目标
}
}
public void OnTrackableStateChanged( //改变跟踪对象的状态,一个以前状态,一个新状态
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
//如果状态在跟踪或者已经检测到,或者扩大跟踪,则去指定跟踪对象,通过OnTrackingFound();
{
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; //设置他的显示
}
}
}
5.然后把此脚本拖放到你指定的ImageTarget上。并且指定你要实例化的对象(即代码中的myModelPrefab)即可。
6.运行,你会发现你所指定的那个对象会动态加载在场景中的ImageTarget下。
相关文章推荐
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【一】
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【三】
- 关于unity动态添加游戏对象问题,如何动态添加一个菜单【二】
- 如何在已经绑定数据的dataGridView对象中动态添加记录?
- < Unity 3D专栏 >动态创建对象,并渲染贴图,动态添加删除脚本
- Unity 3D 动态创建对象,并渲染贴图,动态添加删除脚本
- 关于如何利用原生js动态给一个空对象添加属性以及属性值
- Flex中如何使用addChild()和removeChild()函数动态添加或删除Accordion容器中项目的例子
- Unity 3D 动态创建对象,并渲染贴图,动态添加删除脚本
- jquery如何给对象动态添加属性以及选择器、事件的绑定
- JavaScript 如何给js 空对象动态添加未知属性和值?
- spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
- JavaScript 如何给js 空对象动态添加未知属性和值?
- C# ArrayList如何动态添加对象及取值
- 如何在已经绑定数据的dataGridView对象中动态添加记录?
- jquery如何给对象动态添加属性以及选择器、事件的绑定
- 每天如何自动编译项目并将之打包添加到VSS中
- 熟悉IBatisNet的兄弟,探讨下 如何实现 动态添加SQL语句,查询出随时所需的信息
- 如何使用动态共享对象的模式来安装PHP
- 如何在代码中动态添加按钮控件