1、https://developer.vuforia.com注册账号。

2、分别添加License Manager(连接钥匙),Target Manager(图片后台下载)。

3、下载vuforia-unity-6-2-6.unitypackage (46.20 MB),下载Target Manager里面上传的图片。

4、打开Unity 加载第三部的两个包。

5、如下图unity组件添加

6、钥匙添加后此时这里就可以选择所添加的图片了 如图标注出,下拉选择。背景图片变成选择的图片;然后就可以吧想要展示出来的模型添加成ImageTarget的子物体

7、此时我们就可以实现AR功能。这里我加了两个按钮 实现动画的切换跟返回(附带Button跟模型同时出现隐藏)

8、需要添加的代码如下

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using Vuforia;
using System; public class ChontrolScripts : MonoBehaviour { private Animator ani;
private AnimatorStateInfo current;
private AnimatorStateInfo last; public GameObject canvas;
public DefaultTrackableEventHandler DTEH; // Use this for initialization
void Start () {
ani = GetComponent<Animator>();
current = ani.GetCurrentAnimatorStateInfo();
last = current; DTEH.found += canvansShow;
DTEH.last += cannasHide; } private void cannasHide()
{
if (canvas.activeSelf)
{
canvas.SetActive(false);
}
} private void canvansShow()
{
if (!canvas.activeSelf)
{
canvas.SetActive(true);
}
} // Update is called once per frame
void Update () { if (ani.GetBool("Next"))
{
current = ani.GetCurrentAnimatorStateInfo();
if (current.shortNameHash!=last.shortNameHash)
{
ani.SetBool("Next", false); current = last;
}
}
if (ani.GetBool("Back"))
{
current = ani.GetCurrentAnimatorStateInfo();
if (current.shortNameHash != last.shortNameHash)
{
ani.SetBool("Back", false); current = last;
}
}
} public void OnButtonClickNext()
{ ani.SetBool("Next",true); }
public void OnButtonClickBack()
{
ani.SetBool("Back", true);
} }

/*==============================================================================
Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
==============================================================================*/ using UnityEngine; namespace Vuforia
{
/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class DefaultTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
{
#region PRIVATE_MEMBER_VARIABLES private TrackableBehaviour mTrackableBehaviour; #endregion // PRIVATE_MEMBER_VARIABLES public delegate void FoundOrLastEvent();
public FoundOrLastEvent found;
public FoundOrLastEvent last; #region UNTIY_MONOBEHAVIOUR_METHODS void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
} #endregion // UNTIY_MONOBEHAVIOUR_METHODS #region PUBLIC_METHODS /// <summary>
/// Implementation of the ITrackableEventHandler function called when the
/// tracking state changes.
/// </summary>
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
} #endregion // PUBLIC_METHODS #region PRIVATE_METHODS 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;
}
if (found != null)
{
found();
}
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; }
if (last != null)
{
last();
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
} #endregion // PRIVATE_METHODS
}
}

AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)的更多相关文章

  1. 【经验随笔】Java通过代理访问互联网平台提供的WebService接口的一种方法

    背景 通常有两点原因需要通过代理访问互联网平台的提供的WebService接口: 1. 在公司企业内网访问外部互联网平台发布的接口,公司要求通过代理访问外网. 2. 频繁访问平台接口,IP被平台封了, ...

  2. .NET提供了三种后台输出js的方式:

    .NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js {    Page.ClientScript.RegisterClientScriptInclude("keys ...

  3. 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)

    说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...

  4. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  5. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...

  6. 如何通过AzureAD平台提供的授权方式访问sharepoint online

    官方文档: 1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfro ...

  7. 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...

  8. Hadoop平台提供离线数据和Storm平台提供实时数据流

    1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...

  9. 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)

    开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...

随机推荐

  1. Lucene学习注意要点

    相关书籍: <Lucene实战>第二版: <搜索引擎基础教程>: <Lucene搜索引擎开发进阶实战>:(我现在看得书) 学习注意要点: 不要盲目从代码入手,而要先 ...

  2. 改变tabBarItem颜色

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UICol ...

  3. virtio-win 驱动

    Direct downloads are available for the .iso, .vfd, and qemu-ga installers. Stable virtio-win iso: ht ...

  4. AFNetWorking发送post请求,Code=-1016错误

    使用AFNetWorking发送post请求时,可能会出现下面Code=-1016问题.打印的error如下: Error:Error Domain=com.alamofire.error.seria ...

  5. 74HC166与TPIC6A595分析(转)

    源:Atmega162串行外设接口SPI 一.Atmega162的SPI接口基本概念与工作原理 SPI接口的全称是"Serial Peripheral Interface",意为串 ...

  6. win7 下安装 ubuntu 16.04双系统

    Ubuntu 每年发布两个版本,目前最新正式版版本也升到了 16.04.Ubuntu 16.04 开发代号为"Xenial Xerus",为第六个长期支持(LTS)版本,其主要特色 ...

  7. iOS 之 时间格式与字符串转换

    这个知识点涉及到三个类:NSDate.NSString,另外是一个最重要的类NSDateFormatter.它起到格式转换的作用,至于方法查看头文件就好了.时间格式注意下:yyyyMMddHHmmss

  8. Django用自定义cookies 实现登录,注册,退出

    #注册 def regist(req): if req.method == 'POST': uf = UserForm(req.POST) if uf.is_valid(): #获得表单数据 user ...

  9. mobile meta iphone

    <!doctype html> <html> <head> <title>iOS touch test ( Multi-touch )</titl ...

  10. 如何解决Ajax跨域问题-1

    如何解决Ajax跨域问题 最近在做AJAX调用C的问题,出现跨域问题,学习总结如下: 在做ajax读取数据的时候,经常会遇到ajax需要跨域的问题,但由于浏览器安全方面的限制,XMLHttpReque ...