思路是这样:
识别图视野脱离之后,将被识别的物体不再作为识别图的子物体,转而作为相机的子物体,并置于屏幕中央位置。
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)