Как остановить событие перетаскивания ползунка OnScene GUI с ExecuteEvents в редакторе Unity? - PullRequest
0 голосов
/ 30 января 2020

Я не кодер, поэтому я потратил несколько дней, пытаясь найти способ предотвратить перетаскивание текущего ползунка, но я не могу понять синтаксис, чтобы заставить это работать. Я предполагаю, что ExecuteEvents - это то, что я ищу, но я не знаю, как это сделать.

void OnSceneGUI()
{
    if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && cancel)
    {
        cancel = false;
        ExecuteEvents.Execute<IPointerUpHandler>(PointerEventData.pointerCurrentRaycast.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerUpHandler);
        slider = 0;
    }
}

Я пытаюсь получить ползунок с PointerEventData.pointerCurrentRaycast.gameObject, но это вызывает следующую ошибку,

Ссылка на объект требуется для нестатического c поля, метода или свойства 'PointerEventData.pointerCurrentRaycast' and I don't know why. I am using UnityEngine.EventSystems.

Я также не являюсь уверен, что это правильный подход. Я не против некоторых указателей.

1 Ответ

0 голосов
/ 30 января 2020

Хорошо, потому что pointerCurrentRaycast - это , а не static член. Он принадлежит определенному c экземпляру этого типа, и вам понадобится ссылка на этот экземпляр для доступа к этому значению.


Не знаю, решает ли это то, что вы на самом деле пытаются это сделать, но вы, вероятно, можете создать свой собственный экземпляр PointerEventData в позиции мыши и использовать Raycast, чтобы получить объект, который вы зависли. Что-то вроде

void OnSceneGUI()
{
    if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && cancel)
    {
        cancel = false;

        var pointer = new PointerEventData(EventSystem.current);
         pointer.position = Input.mousePosition;

         List<RaycastResult> raycastResults = new List<RaycastResult>();
         EventSystem.current.RaycastAll(pointer, raycastResults);

         if(raycastResults.Count > 0)
         {
             var obj = raycastResults[0].gameObject;

            ExecuteEvents.Execute<IPointerUpHandler>(obj, pointer, ExecuteEvents.pointerUpHandler);
            slider = 0;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...