描述错误 如果您退出应用程序进入外壳,则手光线会卡住,而如果应用程序未选中“在后台运行”,则返回。旧手射线被卡住,新手射线弹出。因此,您可以同时看到3条或更多条手线。似乎抓斗停止工作,但并非总是如此,但有时会停止。但是,如果远处的交互指针可见,它们总是会在进入shell时卡住。
此勾号是https://github.com/microsoft/MixedRealityToolkit-Unity/issues/4196的重新打开,因为发现了问题,为什么我们的应用程序的行为不同于MRTK示例应用程序。区别在于我们在“后台运行”中未选中,而在MRTK中已选中。
我们希望我们的应用不必在后台运行,以免耗尽电池。但是,如果需要这样做,应该将其记录在某处。
复制 可使用标准MRTK示例构建进行复制。在构建之前,请取消选中“玩家设置”的“解决方案和演示”部分中的“在后台运行”。然后在应用程序中的设备上,如果您在可见手射线的情况下按了主页按钮,然后通过“开始”菜单上的主页按钮转到外壳。等待几秒钟(约10秒)。并打开该应用程序,即可看到以前的手射线,然后出现新的手射线。
预期行为 只有新的手射线可见
答案 0 :(得分:0)
我认为,这归因于InteractionManager在应用程序进入外壳时不会引发视图中的源丢失事件。 Unity错误:https://fogbugz.unity3d.com/default.asp?1162545_9ee6crevf35hsbl5
作为一种解决方法,您可以尝试在应用程序失去焦点时,将以下代码添加到WindowsMixedRealityDeviceManager中,以清除现有的控制器。请记住,这将在WMR设备中引起问题,因为当您取下耳机时,应用会失去焦点,但6个DOF控制器仍然存在,因此它们将被清除并且永远不会恢复。
public override void Enable()
{
// ...
#if !UNITY_EDITOR
Application.focusChanged += OnFocusChanged;
#endif
}
public override void Disable()
{
#if !UNITY_EDITOR
Application.focusChanged -= OnFocusChanged;
#endif
// ...
}
#if !UNITY_EDITOR
private void OnFocusChanged(bool focus)
{
// Remove all active controllers when losing focus
if (!focus && !Application.runInBackground)
{
IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem;
foreach (var keyValue in activeControllers)
{
var controller = keyValue.Value as BaseWindowsMixedRealitySource;
if (controller != null)
{
inputSystem?.RaiseSourceLost(controller.InputSource, controller);
foreach (IMixedRealityPointer pointer in controller.InputSource.Pointers)
{
if (pointer != null)
{
pointer.Controller = null;
}
}
}
}
activeControllers.Clear();
}
}
#endif // !UNITY_EDITOR