Кнопка на TileMap не запускает OnClickC#

Место общения программистов C#
Ответить
Anonymous
 Кнопка на TileMap не запускает OnClick

Сообщение Anonymous »

Сейчас я работаю над очень простым прототипом. У него просто есть Unity 2DTilemap, и с помощью кода я создаю кнопки на некоторых плитках. Каким-то образом эти кнопки не запускают события onClick. Выполняя трассировку Raycast на моем TileMap, я обнаружил, что первый элемент блокирует его ( MainPanelSettings ), похоже, это элемент редактора Unity. Как я могу решить эту проблему?
Кроме того, я трижды проверил все настройки raycast и Z-индексы на своих элементах. Не думаю, что это проблема, но я открыт для любых предложений. Буквально пытаюсь это исправить уже 3 вечера.
Журнал отладки:
Hit: MainPanelSettings
UnityEngine.Debug:Log (object)
TilemapController:Update () (at Assets/Scripts/Map/TileMapController.cs:29)
Hit: TileYieldButton(Clone)
UnityEngine.Debug:Log (object)
TilemapController:Update () (at Assets/Scripts/Map/TileMapController.cs:29)
Click over UI, ignoring TilemapController
UnityEngine.Debug:Log (object)
TilemapController:Update () (at Assets/Scripts/Map/TileMapController.cs:33)

Как я создал этот оператор отладки:
            PointerEventData pointerData = new PointerEventData(EventSystem.current);
            pointerData.position = Mouse.current.position.ReadValue();

            List results = new List();
            EventSystem.current.RaycastAll(pointerData, results);

            foreach (var r in results)
            {
                Debug.Log("Hit: " + r.gameObject.name);
            }
            // Only block if we hit an actual Button
            if (results.Any(r => r.gameObject.GetComponent() != null)) {
                Debug.Log("Click over UI, ignoring TilemapController");
                //return;
            }

Прослушиватель событий кнопки:
            btn.onClick.AddListener(() =>
            {
                bg.color = (bg.color == originalColor) ? Color.grey : originalColor;
                Debug.Log($"Button clicked for tile: {land.Position}");
            });

Я могу вызвать нажатие кнопок с помощью этого, но не путем фактического нажатия кнопки и использования встроенного метода нажатия кнопок:
PointerEventData pointerData = new PointerEventData(EventSystem.current);
pointerData.position = Mouse.current.position.ReadValue();

List results = new List();
EventSystem.current.RaycastAll(pointerData, results);
foreach (var r in results)
{
Button btn = r.gameObject.GetComponent();
if (btn != null)
{
// Fire the button click event manually
btn.onClick.Invoke();
Debug.Log("Manually fired click for button: " + r.gameObject.name);
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... he-onclick
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»