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

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

Сообщение Anonymous »

Сейчас я работаю над очень простым прототипом. У него просто есть карта тайлов Unity 2D, и с помощью кода я создаю кнопки на некоторых плитках. Каким-то образом эти кнопки не запускают события 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}");
            });

С помощью этого я могу инициировать нажатие кнопок, но не путем фактического нажатия и использования встроенного метода onclick кнопки:
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#»