Vuforia 中在脚本中添加识别图被识别和丢失的回调
来源:互联网 发布:淘宝运费险怎么退邮费 编辑:程序博客网 时间:2024/05/17 01:49
start
Vuforia 的unity sdk中有一个重要的脚本 DefaultTrackableEventHandler.cs, 这个脚本在场景中拖入ImageTarget的预制体时会自动挂载
using UnityEngine;using UnityEngine.SceneManagement;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 #region UNTIY_MONOBEHAVIOUR_METHODS void Start() { //easytouch = GameObject.Find ("EasyTouchControlsCanvas"); // easytouch.SetActive (false); 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) { // Debug.Log ("newStatus1" + 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; } 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; } Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost"); } #endregion // PRIVATE_METHODS }}
分析
可以发现这个脚本是实现了ITrackableEventHandler的接口,在通过对OnTrackableStateChanged状态的判断来通知是否完成对识别图的识别或者已经丢失识别图,这样就可以实现在识别时触发一些事件。
由于这个脚本是公共使用的,自动被ImageTarget挂载的 ,存在多个场景或者多个ImageTarget,但是里面定义的事件不是公共的那么就需要自己写一个脚本实现。(模仿DefaultTrackableEventHandler 实现)
using System.Collections;using System.Collections.Generic;using UnityEngine;using DG.Tweening;using Vuforia;/// <summary>/// 出场方式的动画加粒子效果 的控制 /// </summary>public class CoolShowWhenTrack : MonoBehaviour, ITrackableEventHandler{ /// <summary> /// 出场时候附带的粒子 /// </summary> private GameObject showParticle; private DOTweenAnimation[] dotweens; private bool isShowFirst; #region UNTIY_MONOBEHAVIOUR_METHODS // Use this for initialization void Start () { isShowFirst = true; showParticle = GameObject.Find ("showParticle"); dotweens = GetComponentsInChildren<DOTweenAnimation> (); //startShowEffect (); mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } } // Update is called once per frame void Update () { } // 在第一次被识别的时候调用 public void startShowEffect() { // 开启各个动画 foreach (DOTweenAnimation dotween in dotweens) { dotween.DOPlay (); } } #endregion // UNTIY_MONOBEHAVIOUR_METHODS // ### start about track ### #region PRIVATE_MEMBER_VARIABLES private TrackableBehaviour mTrackableBehaviour; #endregion // PRIVATE_MEMBER_VARIABLES #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) { // Debug.Log ("newStatus1" + 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() { Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found111"); // 只在识别后展示一次出场动画 if (isShowFirst) { startShowEffect (); isShowFirst = false; } } private void OnTrackingLost() { Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost111"); } #endregion // PRIVATE_METHODS}
之前把这个脚本挂载在了模型身上,没有生效,经过测试发现 必须挂载在ImageTarget上才可以回调到识别状态改变的事件
最后来个效果展示~:
阅读全文
0 0
- Vuforia 中在脚本中添加识别图被识别和丢失的回调
- 在Hololens中使用Vuforia 进行物体识别入门
- 更换vuforia中ImageTarget功能的识别目标图像
- Vuforia 中修改 当遮挡识别图触发效果
- Vuforia + Unity 中根据不同识别图来切换场景
- vuforia 高通AR中 识别图与被加载的虚拟物体的关系(修正)
- Vuforia识别图的制作标准
- Android中添加和识别手势操作
- Vuforia提高识别图星级
- Vuforia SDK---- Vuforia+unity模型抖动和识别错误解决方案
- qtp录制脚本过程中无法识别控件的解决方法
- 利用Vuforia自定义识别/动态生成识别图的简单操作步骤
- 在OCR文字识别软件中安装和启动 OCR文字识别软件 Hot Folder的方法
- robotframwork中添加.py变量文件不识别的问题
- Pycharm取消py脚本中SQL识别
- Android | Vuforia 多图同时识别
- Vuforia用户自定义识别
- Vuforia文字识别
- mui中的本地语音转文字,而不用讯飞的,使用百度的。
- Redis 事务
- 【Spring Cloud】二、Eureka Client 服务注册中心客户端启动注册服务
- TensorFlow 中 使用 tensorboard 无法加载生成的文件
- java开发微信公众号企业付款开发
- Vuforia 中在脚本中添加识别图被识别和丢失的回调
- JavaScript获取当前时区 时间转换
- java 注解
- 链表栈的入栈和出栈操作
- Java的break和contunie加(label)标签的用法
- rn封装原生jsbridge与H5交互
- 如何加密 Windows VM 上的虚拟磁盘
- MAVEN项目构建SSH项目 转载
- 记录一下超出省略