Сейчас я работаю над очень простым прототипом. У него просто есть 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
Кнопка на TileMap не запускает OnClick ⇐ C#
Место общения программистов C#
1772122799
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79896509/button-on-tilemap-not-firing-the-onclick[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия