获取 target 的状态
session 运行过程中,target 会经历跟踪和丢失等状态变化。通过以下内容,您将了解如何获取和使用 target 的状态信息,以及如何使用 found 和 lost 事件来控制内容的显示。
开始之前
- 通过 ARSession 简介 了解 session 的基本概念、组成和工作流程。
- 通过 Target 了解 target 的基本概念、状态和生命周期。
判断 target 是否被跟踪
可以使用 TargetController.IsTracked 属性判断 target 是否被跟踪。
使用 target 的 found 和 lost 事件
可以使用 TargetController.TargetFound 和 TargetController.TargetLost 事件来处理 target 被跟踪和丢失的情况。
比如,下面的代码展示了在 target 被跟踪时播放视频,并在 target 丢失时暂停视频播放的过程:
target.TargetFound += () =>
{
if (player && player.gameObject.activeInHierarchy)
{
player.Play();
}
};
target.TargetLost += () =>
{
if (player && player.gameObject.activeInHierarchy)
{
player.Pause();
}
};
小心
如果没有手动卸载 target,TargetController.TargetLost 有可能在 session 停止时被调用。如果没有手动停止 session,则它可能在 session 的 OnDestroy 过程中被调用,由于 Unity 的 OnDestroy 执行顺序是不受保证的,所以在事件中使用的对象需要进行有效性检查以避免在 OnDestroy 过程中访问已经被销毁的对象。
后续步骤
- active 控制策略 介绍了 target 下物体的默认显示和隐藏策略,以及如何根据需要进行调整。