AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
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平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)的更多相关文章
- 【经验随笔】Java通过代理访问互联网平台提供的WebService接口的一种方法
背景 通常有两点原因需要通过代理访问互联网平台的提供的WebService接口: 1. 在公司企业内网访问外部互联网平台发布的接口,公司要求通过代理访问外网. 2. 频繁访问平台接口,IP被平台封了, ...
- .NET提供了三种后台输出js的方式:
.NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js { Page.ClientScript.RegisterClientScriptInclude("keys ...
- 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)
说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...
- 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案
文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案 介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...
- 30行代码消费腾讯人工智能开放平台提供的自然语言处理API
腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...
- 如何通过AzureAD平台提供的授权方式访问sharepoint online
官方文档: 1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfro ...
- 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...
- Hadoop平台提供离线数据和Storm平台提供实时数据流
1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...
- 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
开发微信/易信公共平台时,调试往往很麻烦,一般只能在手机上边试边改, 或在服务器写日志.当你的服务器脚本有Bug时,手机上没有显示,追查是不容易的.我在开发过程中,编写了一个调试器, 能仿真微信/易信 ...
随机推荐
- NMEA协议 上位机 C# (转)
源:NMEA协议 上位机 c# 前些时间写做了两款用NMEA协议的上位机,在这里做一个总结和记录.和大家分享,也为了以后不会忘记. NMEA协议总体来说,相对简单,是气象上比较成熟的协议. 主要有以下 ...
- iOS 数字每隔3位添加一个逗号的
+(NSString *)countNumAndChangeformat:(NSString *)num { ; long long int a = num.longLongValue; ) { co ...
- Tsinsen-1487:分配游戏【树状数组】
首先一定要看到x + y + z = N这个条件,没看到就世界再见了. 赢的人得分需要大于等于2,那么无非就是 (x, y), (x, z), (y, z), (x, y, z) 大于其他的点.但是考 ...
- Unity3D ——强大的跨平台3D游戏开发工具(三)
第四章 为地形添加水源.水流以及水下的模糊效果 制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富. 第一步:添加水面 由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它 ...
- imagebutton、imageview的属性
[转]http://blog.csdn.net/victoryckl/article/details/14162131 http://blog.sina.com.cn/s/blog_68b3fdc30 ...
- 笔记整理--玩转robots协议
玩转robots协议 -- 其他 -- IT技术博客大学习 -- 共学习 共进步! - Google Chrome (2013/7/14 20:24:07) 玩转robots协议 2013年2月8日北 ...
- OC 优化目录
把 main. info 和 appdelegate 放到自己的新建目录 1.去掉info.plist的警告 在build phases->copy Bundle Resources中去掉inf ...
- iOS 设置控件圆角、文字、字体
以按钮为例: UIButton btn = [UIButton new]; btn.layer.masksToBounds = YES; btn.layer.cornerRadius = 10.0; ...
- 判断activity是否显示在界面上
boolean result = false; ActivityManager am = (ActivityManager) context .getSystemService(Context.ACT ...
- java_web学习(8)会话与状态管
HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议.HTTP是hypertext transfer protocol(超文本传输协 ...