问题在于相机在跟踪图像目标时会增强 3D 模型。我尝试过使用扩展跟踪功能,但当相机未跟踪图像目标时,3D 图像仍然消失。有没有办法让 3D 模型在跟踪图像目标后固定在某个位置?
我尝试使用下面的脚本,它给了我以下错误消息:找不到类型或命名空间名称“ITrackableEventHandler”(您是否缺少 using 指令或程序集引用?
using UnityEngine;
using Vuforia;
public class KeepObjectVisible : MonoBehaviour, ITrackableEventHandler
{
private TrackableBehaviour mTrackableBehaviour;
private bool isTracking = false;
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
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 if (previousStatus == TrackableBehaviour.Status.TRACKED &&
newStatus == TrackableBehaviour.Status.NO_POSE)
{
OnTrackingLost();
}
else
{
OnTrackingLost();
}
}
private void OnTrackingFound()
{
isTracking = true;
SetChildrenActive(true);
}
private void OnTrackingLost()
{
isTracking = false;
// Here, we do not deactivate the children to keep the object visible.
}
void Update()
{
if (!isTracking)
{
// Logic to keep the object visible and possibly maintain its last known position.
}
}
private void SetChildrenActive(bool active)
{
foreach (Transform child in transform)
{
child.gameObject.SetActive(active);
}
}
}
我会阅读这篇关于 设备跟踪 以及如何在 Unity 项目中启用扩展跟踪的文章。
您需要启用设备跟踪器才能启用扩展跟踪。您可以在 Vuforia 配置中找到此设置。
然后,您可以使用图像目标行为上的默认观察者事件处理程序组件来控制应跟踪目标的状态。例如,您可以将其设置为 Tracked 或 Extended Tracked。
我认为不需要在脚本中控制它。
ITrackableEventHandler
和 TrackableBehaviour
来自 9.8 Vuforia Engine API,早已被弃用。因此,如果您想编写该行为的脚本,则应该使用 TargetStatus(Status, StatusInfo)
来代替。请参阅此页面查看示例。