【问题标题】:MRTK V2 - How to access Receivers?MRTK V2 - 如何访问接收器?
【发布时间】:2020-03-10 14:11:20
【问题描述】:

在我的场景开始时,我设置了所有的 OnClick- 和 OnFocus-Listeners(您可以在本文末尾的代码 sn-p 中看到)。 当我使用给定的 mrtk-prefab-buttons 时,它们上面有 Interactable 脚本,在 ReceiversInteractableOnFocusReceiver 下已经存在,你可以在下面的屏幕截图中看到。



我的问题:
通过添加接收器(通过下面的代码),一切正常,但我收到以下消息:


我想这是因为已经有一个OnFocusReceiver 并且我正在添加另一个,或者我缺少一些额外的数据/组件。所以我试图以某种方式访问​​已经存在的OnFocusReceiver,但找不到实现这一目标的方法。尝试comp.GetReceiver<InteractableOnFocusReceiver>(); 给了我null,即使在统一编辑器中我看到了 OnFocusReceiver。 sb 是否知道如何访问此接收器,以便我可以添加另一个触发方法?

public static void ManageListenerForFocus(
    bool addReceiver, 
    Interactable comp, 
    Listener methodForFocusEnter, 
    Listener methodForFocusExit)
{
    var onFocusReceiver = comp.AddReceiver<InteractableOnFocusReceiver>();

    if (addReceiver)
    {
        onFocusReceiver.OnFocusOn.AddListener(() => methodForFocusEnter(comp));
        onFocusReceiver.OnFocusOff.AddListener(() => methodForFocusExit(comp));
    }
    else
    {
        onFocusReceiver.OnFocusOn.RemoveListener(() => methodForFocusEnter(comp));
        onFocusReceiver.OnFocusOff.RemoveListener(() => methodForFocusExit(comp));
    }
}

public static void ManageListenerForClicks(
    bool addListener,
    Interactable comp,
    UnityAction actionForOnClick)
{
    if (addListener)
        comp.OnClick.AddListener(actionForOnClick);
    else
        comp.OnClick.RemoveListener(actionForOnClick);
}

【问题讨论】:

  • 如果您想在这个游戏对象上添加另一个触发方法,您应该在 OnFocusOn() 列表中单击“+”并选择每次都会调用的函数。为什么要在同一个游戏对象下的 Interactable 类中添加另一个?您能否提供有关您的业务需求的更多信息?
  • 我只想知道如何在运行时添加一个由OnFocus 触发的方法。而且因为预制按钮已经在interactable-component 上有一个接收器(你在屏幕截图中看到)我只想添加一个方法而不是添加一个新的接收器等等......

标签: unity3d augmented-reality hololens mrtk


【解决方案1】:

要在运行时为 OnFocusReceiver 添加一个方法,您只需向现有接收器添加一个侦听器:

    var onFocusReceiver = gameObject.GetComponent<Interactable>().GetReceiver<InteractableOnFocusReceiver>();
    onFocusReceiver.OnFocusOn.AddListener(() => Debug.Log("ONtest"));
    onFocusReceiver.OnFocusOff.AddListener(() => Debug.Log("OFFtest"));

【讨论】:

  • 这就是我要说的问题。如果我尝试这个,var onFocusReceiver 为空。它说没有接收器。但是在编辑器中查看我的按钮(截图)我发现有一个
  • @Perazim 您使用的是哪个预制按钮?我用 PressableButtonHoloLens2TextOnly_48x48 测试了这段代码,它工作正常。你能在其他新项目中重现这个问题吗?您使用的是哪个版本的 Unity 和 MRTK?
  • 我正在使用 MRTK v2.2、Unity 2019.3.3 和 Prefab 作为按钮集合,我称之为工具栏,您可以在 [这里的第一张图片][1] 上看到它。但是我要重试,也许我在某个地方做错了。 [1]:docs.microsoft.com/en-us/windows/mixed-reality/button
  • 我无法用任何想象力来解释为什么它现在有效。我之前做过很多次,每次都有null。但是现在,重试后,它起作用了!也感谢您在这里回复我的帖子!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多