首页 > 解决方案 > 带有 WMR HMD 事件的 MRTKv2 PressableRoundButton 预制件似乎对我不起作用

问题描述

我创建了一个小测试场景,我想使用 PressableRoundButton 预制件在按下时添加加载场景。我已经连接了按钮以调用脚本并传递我要加载的场景的名称,此代码已验证可与调试键盘快捷键一起使用,因此我知道该部分很好。似乎不起作用的是按钮事件本身。也许我已经做了一些非常愚蠢的事情,但我愚蠢地无法弄清楚我做错了什么。

我正在使用DefaultMixedRealityToolkitConfigurationProfilewhich 可能是也可能不是问题,但我有点不确定如何诊断。我有点认为默认的将是最安全的选择。当我使用 WMR 控制器单击按钮时,我可以看到按钮在视觉上被按下,因此按钮背后的所有机制都在将其按下以及当我在指向它的同时按下触发器时所有这些机制都在工作

按钮事件列表

标签: c#mrtk

解决方案


感谢您分享您的设置图片!尝试不在组件中调用您的代码PressableButton,而是在Interactable组件的OnClick处理程序中调用(您需要在 Interactable.

PressableButton 组件实际上只会在您直接戳具有接近交互的按钮时引发按下按钮等事件。要在远处按下按钮,请使用 Interactable 中的 OnClick 事件处理程序。

查看这里的图片,了解 OnClick 处理程序所在的位置

请注意,OnClick 只会在指针未按下时触发,并且(当前)如果您按下时间过长也不会触发。如果您想在按下时运行代码,则可以改为处理 OnPress 事件。

看看这里的例子

请注意,默认情况下,Interactables 仅处理 OnClick 事件——您可以通过单击“添加事件”按钮添加“事件接收器”来添加更多事件处理程序。然后,您可以选择接收器类型。对于圆形按钮预制件,已经InteractableOnPressReceiver为您设置了一个公开 OnPress 和 OnRelease 事件的设置。

在 MRTK 中考虑按钮的方式是:

  • Interactable 实际上是一个“按钮”,可以在附近和远处进行交互。它公开了许多不同的事件处理程序,并具有许多视觉选项。它之所以被称为“可交互”而不是“按钮”,主要是出于历史原因(就是这样,人们开始使用它,现在改变它会破坏很多人)。
  • PressableButton 是一个更复杂的纯触摸按钮,它实际上是用手指移动的。Pressable 按钮实际上与 Interactable 对话,设置诸如按下状态之类的东西,这样如果人们想在近处和远处工作,他们就可以只听 Interactable。

在大多数情况下,将您的事件处理程序添加到可交互的,不可按下的按钮。可按下按钮仅用于触摸。


推荐阅读