В начале своей сцены я настроил все свои OnClick- и OnFocus-Listeners (которые вы видите в фрагменте кода в конце этого поста). Поскольку я использую данные кнопки mrtk-prefab-button, на которых есть скрипт Interactable
, они уже находятся под Receivers
и InteractableOnFocusReceiver
, как вы видите на скриншоте ниже.
Моя проблема:
При добавлении приемника (с помощью кода ниже) все работает нормально, но я получить это сообщение:
Я полагаю, это происходит потому, что уже есть 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);
}