本文主要是介绍vuforia模型脱卡功能的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这是转载,转载,转载,附原地址:
http://www.manew.com/thread-92769-1-1.html
实现思路是这样:
识别图视野脱离之后,将被识别的物体不再作为识别图的子物体,转而作为相机的子物体,并置于屏幕中央位置。
1.首先,
写个小script:
[C#] 纯文本查看 复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | using UnityEngine; using Vuforia; public class pageNotFound404 : MonoBehaviour,ITrackableEventHandler { private TrackableBehaviour mTrackableBehaviour; public Transform Target; //识别物 Vector3 imgPos= new Vector3 (0,0.372f,0); //识别图上的位置 Vector3 camPos= new Vector3 (0,0,500); //脱卡后在屏幕中的位置 //这俩值,具体多少得自己调,模型尺寸、重心不同 bool isFirstTime= true ; void Start() { mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler( this ); } Target .GetComponent<MeshRenderer>().enabled= false ; //起始时不显示 } public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { //视野内发现识别图时 Target .GetComponent<MeshRenderer>().enabled= true ; Target.parent = this .transform ; Target.localPosition = imgPos; Target.localRotation = Quaternion.identity; isFirstTime = false ; } else { //视野内没有识别图时,这里我是把位置和旋转都归零了,如果不做处理,可以 if (!isFirstTime){ Target.parent=Camera.main .transform; Target.localPosition= camPos; Target.localRotation = Quaternion.identity; } } } } |
2.然后,如图,将我们的小脚本挂载在 Image Target 上,并将 DefaultTrackableEventHandler 去除掉(remove component)
3.测试
这篇关于vuforia模型脱卡功能的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!