Не всегда нужное OnValueChanged

Графический интерфейс пользователя

Не всегда нужное OnValueChanged

Сообщение ArXen42 19 сен 2015, 14:36

Вот есть такая ситуация: пара неких объектов (скажем, каких-то приборов), у них есть некоторые характеристики и их можно регулировать через окошко UI. При этом есть "фокус" - на что сейчас "нацелено" это окошко, т.е. какой объект сейчас настраивается. Допустим мы можем включать/выключать эти приборы с помощью чекбокса (UI.Toggle).
Я сделал это так:
  1. При щелчке по прибору (т.е. смене фокуса) вызывается метод установки начального значения чекбокса, т.е. если щелкнули по выключенному прибору, то и чекбокс, что вполне логично, будет в "выкл" положении.
  2. А на OnValueChanged этого чекбокса соответственно повешен метод переключения этого прибора

Иными словами чекбокс одновременно отображает текущее состояние объекта и позволяет его менять.

Глобальная логическая проблема: для установки чекбокса в начальное положение (п.1) нужно вызвать что-то вроде
Синтаксис:
Используется csharp
checkbox.isOn = equipment.Enabled;
 

Т.е. приходится менять его значение, а значит вызывается OnValueChanged, а значит и метод переключения прибора.

Разумеется у меня все чуть сложнее: кроме чекбокса есть еще слайдер, положение слайдера связано с чекбоксом (питание оборудования и включен/выключен), пункт 1 делается с помощью события и т.д. В результате эта проблема порождает кучу багов (например был самонажимающийся чекбокс, циклично переключающий самого себя).
Конечно, можно нагородить костылей (уже начал). Но такое положение вещей меня абсолютно не устраивает - первая игра, а уже костыли, fu.

В общем нужно отделить установку значения из кода и реального, которое игрок делает. Может можно как-то подписаться на событие переключения мышкой/тапом?
Разрабатываю пошаговую космическую RPG в стиле Космических Рейнджеров - Stardust.
ArXen42
UNIт
 
Сообщения: 127
Зарегистрирован: 12 сен 2014, 17:34
Откуда: Санкт-Петербург
Skype: georgy10003
  • Сайт

Re: Не всегда нужное OnValueChanged

Сообщение BornFoRdeatH 19 сен 2015, 15:04

Только переопределить сам тугл, в самом тугле есть нужные методы, но чего-то юнитеки решили что они никому ненужны и заприватили.

Синтаксис:
Используется csharp
private void Set(bool value, bool sendCallback)
 
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Не всегда нужное OnValueChanged

Сообщение ArXen42 19 сен 2015, 15:14

Не приходилось еще переопределять методы юньки. Не могли бы вы чуть подробнее описать? Вот конкретно, есть некий метод ToggleEquipment(), как его "повесить" на нажатие по чекбоксу. Пардон за нубизм)
Разрабатываю пошаговую космическую RPG в стиле Космических Рейнджеров - Stardust.
ArXen42
UNIт
 
Сообщения: 127
Зарегистрирован: 12 сен 2014, 17:34
Откуда: Санкт-Петербург
Skype: georgy10003
  • Сайт

Re: Не всегда нужное OnValueChanged

Сообщение BornFoRdeatH 19 сен 2015, 15:20

Берем сорцы https://bitbucket.org/Unity-Technologie ... 61/?at=5.2, с них берем тугл https://bitbucket.org/Unity-Technologie ... ew-default, переписываем как нужно.
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3