c# - 使用 Unity3D 增强现实
问题描述
我正在开发一个 AR Android 应用程序。我完成了应用程序的构建,但是每当我打开它时,甚至在扫描目标图像之前,视频都会在后台播放,但只有在我扫描图像时才会显示视频。对此有任何帮助或建议吗?DefaultTrackableEventHandler.cs 的代码是:
using UnityEngine;
using Vuforia;
public class DefaultTrackableEventHandler : MonoBehaviour, ITrackableEventHandler
{
protected TrackableBehaviour mTrackableBehaviour;
protected TrackableBehaviour.Status m_PreviousStatus;
protected TrackableBehaviour.Status m_NewStatus;
protected virtual void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
protected virtual void OnDestroy()
{
if (mTrackableBehaviour)
mTrackableBehaviour.UnregisterTrackableEventHandler(this);
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
m_PreviousStatus = previousStatus;
m_NewStatus = newStatus;
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
OnTrackingFound();
}
else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
newStatus == TrackableBehaviour.Status.NO_POSE)
{
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
OnTrackingLost();
}
else
{
OnTrackingLost();
}
}
protected virtual void OnTrackingFound()
{
var rendererComponents = GetComponentsInChildren<Renderer>(true);
var colliderComponents = GetComponentsInChildren<Collider>(true);
var canvasComponents = GetComponentsInChildren<Canvas>(true);
foreach (var component in rendererComponents)
component.enabled = true;
foreach (var component in colliderComponents)
component.enabled = true;
foreach (var component in canvasComponents)
component.enabled = true;
}
protected virtual void OnTrackingLost()
{
var rendererComponents = GetComponentsInChildren<Renderer>(true);
var colliderComponents = GetComponentsInChildren<Collider>(true);
var canvasComponents = GetComponentsInChildren<Canvas>(true);
foreach (var component in rendererComponents)
component.enabled = false;
foreach (var component in colliderComponents)
component.enabled = false;
foreach (var component in canvasComponents)
component.enabled = false;
}
}
解决方案
如果您使用 Unity Videoplayer,请检查您是否在 Video Player Inspector 视图中禁用了 Loop 选项。
其次,包含 VideoPlayer 组件的游戏对象是 ImageTarget 游戏对象的子对象吗?
第三,您必须在 OnTrackingFound() 中管理 Play,在 OnTrackingLost() 中管理有关 VideoPlayer 的 Stop。
推荐阅读
- javascript - 为什么这个简单的 moment.js 逻辑会导致无限循环?
- reactjs - react jsx的平均分
- sql - 如何解决 Mode.com 上的警告:“...”处或附近的语法错误?
- fonts - 有没有用 v-hook 写 q 的字体?
- android - 从服务访问 ViewModel
- python - 在执行 C 代码期间,通过 python 中的 ctypes 调用 ac 函数是否会释放 GIL
- java - BLE 连接到插座
- node.js - 您如何播种 mongodb 数据库,以便 Keystone 5 CMS 识别多对多关系?
- conv-neural-network - 谁能简要解释一下 CNN 中的串联是什么意思?我们为什么用它。它未来的用途是什么?
- javascript - 如何指定要在反应中显示的数据列表的行数