0

如果您离开应用程序进入外壳并返回如果应用程序未选中“在后台运行”,请描述手光线卡住的错误。旧手光线卡住,新手光线弹出。因此,您可以同时看到 3 个或更多手部光线。似乎抓取停止工作,并非总是如此,但有时。但是如果远交互指针是可见的,它们总是在进入 shell 时被卡住。

这个勾选是重新打开https://github.com/microsoft/MixedRealityToolkit-Unity/issues/4196,因为问题被发现了为什么我们的应用程序的行为与 MRTK 示例应用程序不同。不同之处在于在我们的后台运行中未选中并在 MRTK 中选中。

我们希望我们的应用程序不必在后台运行,也不会耗尽电池电量。但是,如果需要这样做,则应在某处记录。

使用标准 MRTK 示例构建重现 Reproducible。在构建之前取消选中“播放器设置”的“分辨率和演示”部分中的“后台运行”。然后在应用程序中的设备上,如果您在手部光线可见的情况下点击主页按钮,然后通过开始菜单上的主页按钮进入外壳。等待几秒钟(约 10 秒)。并打开应用程序,可以看到以前的手部光线并出现新的手部光线。

预期行为 只有新的手部光线可见

4

1 回答 1

0

我相信这归结为 InteractionManager 没有在应用程序进入 shell 时为视图中的手引发源丢失事件。统一错误: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
于 2019-07-24T03:28:13.830 回答