带有 WMR HMD 事件的 MRTKv2 PressableRoundButton 预制件似乎对我不起作用

MRTKv2 PressableRoundButton prefab with events with WMR HMD don't seem to be working for me

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

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

Button Events list

感谢您分享您的设置图片!尝试不在 PressableButton 组件中调用您的代码,而是在 Interactable 组件的 OnClick 处理程序中调用您的代码(您需要展开 Interactable 中的 "Events" 下拉列表。

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

Have a look at the picture here to see where the OnClick handler lives.

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

Have a look here for that example.

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

考虑 MRTK 中按钮的方式是:

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

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