программно изменить значение переменной
|
|
Hallowed | Дата: Суббота, 16 Декабря 2017, 18:51 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| здравствуйте необходимо изменить значение переменной, получая её имя из инспектора
хочется вдохнуть жизнь в следующую конструкцию:
Код public void ClickUp(string par_block) { GameManager.Instance.par_block = GameManager.Instance.par_block + 1; // вопрос в том - как поменять значение переменной, принимаемой в par_block }
par_block - название переменной в инспекторе в свойстве события On Click () в инспекторе, пишу в неё, например: Priznak_a или Priznak_b, то есть: в par_block подставляю название переменной, к которой работающее обращение из скриптов выглядит следующим образом: GameManager.Instance.Priznak_a=.... или GameManager.Instance.Priznak_b=...
сейчас решаю это отвратительным костылём :((
Код public void ClickUp(string par_block) { switch (par_block) { case "Priznak_a": { GameManager.Instance.Priznak_a = GameManager.Instance.Priznak_a + 1; } break; } }
помогите пожалуйста написать правильно
|
|
| |
pixeye | Дата: Суббота, 16 Декабря 2017, 21:22 | Сообщение # 2 |
Red Winter Software
Сейчас нет на сайте
| Можешь показать пример с картинками из инспектора где ты вообще такое используешь? Просто тут вопрос скорее в том, а нужно ли вообще такое делать
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
|
|
| |
Vostrugin | Дата: Суббота, 16 Декабря 2017, 21:33 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Hallowed, Пиксай правильно сказал, скорее всего тебе это не нужно. А вообще, такую задачу можно решить рефлексией.
|
|
| |
drcrack | Дата: Воскресенье, 17 Декабря 2017, 00:21 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Тебе нужен SerializableDictionary, который будет и в инспекторе более-менее нормально отображаться, и в коде можно будет работать без рефлексии и прочих костылей
Сообщение отредактировал drcrack - Воскресенье, 17 Декабря 2017, 00:26 |
|
| |
Hallowed | Дата: Воскресенье, 17 Декабря 2017, 11:50 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата Vostrugin ( ) скорее всего тебе это не нужно на сцене много пар кнопка-поле_для_ввода при нажатии на кнопку надо чтобы изменялась соответствующая переменная, хранящаяся в объекте (это синглтон в данном случае, но мог быть и просто объект, хранящий все параметры) название этой переменной я пишу в инспекторе
то есть надо было обратится к свойству объекта, чье имя создается динамически
Цитата drcrack ( ) Тебе нужен SerializableDictionary, который будет и в инспекторе более-менее нормально отображаться, и в коде можно будет работать без рефлексии и прочих костылей можете немного пояснить - как этим пользоваться, а то там даже объявления MonoBehaviour нет и на объект в сцене ни добавить, а три строчки в Description разобраться не помогают
пока буду делать через рефлексию
Код public void ClickUp(string par_block) { FieldInfo field = typeof(GameManager).GetField(par_block); field.SetValue(GameManager.Instance, ((int)field.GetValue(GameManager.Instance) + 1)); } Добавлено (17 декабря 2017, 11:50) --------------------------------------------- картинка не добавилась http://www.screencapture.ru/file/21f6dCF9
|
|
| |
pixeye | Дата: Воскресенье, 17 Декабря 2017, 12:00 | Сообщение # 6 |
Red Winter Software
Сейчас нет на сайте
| Цитата Hallowed ( ) пока буду делать через рефлексию
Никогда и ни при каких обстоятельствах. Не издевайся над собой и игровым кодом только потому что не можешь найти ответ.
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
|
|
| |
pixeye | Дата: Воскресенье, 17 Декабря 2017, 12:06 | Сообщение # 7 |
Red Winter Software
Сейчас нет на сайте
| Если серилизуемые словари для тебя сложны то начни с этого.
https://unity3d.college/2016/10/05/unity-events-actions-delegates/ http://www.unitygeek.com/delegates-events-unity/ https://www.dotnetperls.com/action
Если делегаты и эвенты тоже сложны то скорее всего у тебя крайне поверхностное представление о том что ты делаешь и найди время уделить обучению вместо создания игры. Это потом окупится стократ. (
Старайся то что ты хочешь через инспектор делать кодом. По опыту могу сказать что настройка через инспектор чего либо - маленькое удовольствие. Быстро превращается в невыобразимую кашу которую забудешь через пару дней
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
Сообщение отредактировал pixeye - Воскресенье, 17 Декабря 2017, 12:10 |
|
| |
drcrack | Дата: Воскресенье, 17 Декабря 2017, 12:57 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Цитата можете немного пояснить - как этим пользоваться, а то там даже объявления MonoBehaviour нет и на объект в сцене ни добавить, а три строчки в Description разобраться не помогают Вместо того чтобы заводить отдельные переменные для каждого параметра, ты создаешь одно хранилище:
Код public SerializableDictionary<string, int> params = new SerializableDictionary<string, int>(); Он появляется в инспекторе и ты можешь добавлять туда значения, а в коде работаешь так:
Код GameManager.Instance.params["par_block"] = GameManager.Instance.params["par_block"] + 1;
Сообщение отредактировал drcrack - Воскресенье, 17 Декабря 2017, 12:57 |
|
| |