MRTK V2 - Как получить доступ к приемникам? - PullRequest
1 голос
/ 10 марта 2020

В начале своей сцены я настроил все свои OnClick- и OnFocus-Listeners (которые вы видите в фрагменте кода в конце этого поста). Поскольку я использую данные кнопки mrtk-prefab-button, на которых есть скрипт Interactable, они уже находятся под Receivers и InteractableOnFocusReceiver, как вы видите на скриншоте ниже.

enter image description here

Моя проблема:
При добавлении приемника (с помощью кода ниже) все работает нормально, но я получить это сообщение:

enter image description here

Я полагаю, это происходит потому, что уже есть OnFocusReceiver, и я добавляю еще один, или я пропустил некоторые дополнительные данные /составная часть. Поэтому я попытался каким-то образом получить доступ к OnFocusReceiver, который уже существует, но не смог найти способ добиться этого. Попытка comp.GetReceiver<InteractableOnFocusReceiver>(); дает мне null, хотя в редакторе Unity я вижу 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);
}

1 Ответ

2 голосов
/ 12 марта 2020

Чтобы добавить метод для OnFocusReceiver во время выполнения, вам просто нужно добавить прослушиватель к существующему получателю:

    var onFocusReceiver = gameObject.GetComponent<Interactable>().GetReceiver<InteractableOnFocusReceiver>();
    onFocusReceiver.OnFocusOn.AddListener(() => Debug.Log("ONtest"));
    onFocusReceiver.OnFocusOff.AddListener(() => Debug.Log("OFFtest"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...