Четверг, 28 Марта 2024, 17:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » ссылка на переменную в инспекторе (адрес/указатель) (Есть ваще такое в шарпе в unity?)
ссылка на переменную в инспекторе (адрес/указатель)
zaicev9797Дата: Четверг, 28 Июня 2018, 11:20 | Сообщение # 1
AbRaKaDaBrA
Сейчас нет на сайте
Предположим есть у меня какой то объект. Есть у него две переменных health и fuel и может потом я захочу к нему добавить еще shield.
И есть у меня два хелзбара для health и для fuel и потом я еще возможно захочу добавить бар для shield.
Мне очень лень писать практически один и тот же скрипт для каждого из хелзбаров, и менять там лишь только название переменной которую он берет из моего объекта.
Мне бы хотелось просто указывать в инспекторе адрес (ну типа как в плюсах к переменной можно либо по адресу либо по указателю добраться) или мб. имя переменной к которой конкретный хелзбар будет оращаться, т.к. в теории еще малоли для каких параметров кроме этих трех я захочу сделать бары, но алгоритм независимо от этого останется тем же.
Есть способ это сделать?


проект Mysterious Space. The losted moment
orkonsДата: Четверг, 28 Июня 2018, 11:49 | Сообщение # 2
частый гость
Сейчас нет на сайте
А какой-там скрипт для каждого хелсбара? Там условно говоря 2 строчки всего. Надо получить ссылку на слайдер, отображающий ХП полоску, и ему присваивать значение переменной хп/топлива/защиты.

Сообщение отредактировал orkons - Четверг, 28 Июня 2018, 11:51
zaicev9797Дата: Четверг, 28 Июня 2018, 11:55 | Сообщение # 3
AbRaKaDaBrA
Сейчас нет на сайте
если честно, просто с естетической точки зрения.
Просто кайфово же, когда просто передал значение по ссыллке, и не надо стопицот однотипных скриптов плодить, плюс еще в итоге меньше времени на компиляцию + меньший размер исходного файла. Все почучуть складывается и в итоге тогда проект больше походит на профессиональный продукт, нежели на школьную поделку и проще людей к совместной разработке привлечь.


проект Mysterious Space. The losted moment
drcrackДата: Четверг, 28 Июня 2018, 11:56 | Сообщение # 4
старожил
Сейчас нет на сайте
делаешь string targetFloat и дальше рефлексией GetType() GetFields() GetValue()
придется написать кучу кода и все будет очень медленно, зато не придется писать 2 строчки каждый раз при добавлении нового бара


Сообщение отредактировал drcrack - Четверг, 28 Июня 2018, 12:01
zaicev9797Дата: Четверг, 28 Июня 2018, 11:58 | Сообщение # 5
AbRaKaDaBrA
Сейчас нет на сайте
оооо, вот эт похоже на то что мне нужно, ушол курить

проект Mysterious Space. The losted moment
drcrackДата: Четверг, 28 Июня 2018, 12:07 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
если честно, просто с естетической точки зрения.

по-моему наоборот это мега криво) лучший код это код простой как топор и понятный даже дошкольнику
если нужен новый класс — делаешь новый класс
либо добавляешь enum в старый для переключения режимов работы

Цитата
Все почучуть складывается и в итоге тогда проект больше походит на профессиональный продукт,

на гитхабе есть куча этих самых профессиональных продуктов, можешь поизучать их код
orkonsДата: Четверг, 28 Июня 2018, 12:10 | Сообщение # 7
частый гость
Сейчас нет на сайте
Возможно пригодится: как реализован ХП-бар у мобов у меня https://gcup.ru/forum/59-100597-1 (на данный момент последнее видео в первом посте). Это вариант новичка, изучающего с# 2 месяца, но вдруг, так как там есть видео с детальным разбором кода.
zaicev9797Дата: Четверг, 28 Июня 2018, 13:32 | Сообщение # 8
AbRaKaDaBrA
Сейчас нет на сайте
да вроде не так уж и мудрено
Код
public int myVar = 42;

void OnGUI () {
if (GUILayout.Button("Output Variable Value")) {
int newVar = (int)this.GetType().GetField("myVar").GetValue(this);
Debug.Log("Variable value: " + newVar);
}
}


проект Mysterious Space. The losted moment

Сообщение отредактировал zaicev9797 - Четверг, 28 Июня 2018, 13:32
drcrackДата: Четверг, 28 Июня 2018, 14:04 | Сообщение # 9
старожил
Сейчас нет на сайте
не мудрено но очень медленно
как минимум GetField надо сохранить и не вызывать каждый раз
но даже GetValue все равно в сотни раз тормознее чем просто чтение поля
zaicev9797Дата: Четверг, 28 Июня 2018, 14:20 | Сообщение # 10
AbRaKaDaBrA
Сейчас нет на сайте
ну и хелзбаров на экране единовременно не так уж много, так что не критично

проект Mysterious Space. The losted moment
seamanДата: Четверг, 28 Июня 2018, 14:41 | Сообщение # 11
старожил
Сейчас нет на сайте
> хелзбаров на экране единовременно не так уж много, так что не критично
Зато OnGUI вызывается несколько раз за кадр...
zaicev9797Дата: Четверг, 28 Июня 2018, 15:54 | Сообщение # 12
AbRaKaDaBrA
Сейчас нет на сайте
а я не через гуай, такие примитивные вещи можно и самому из плейнов собирать, как мне кажется вполне себе вариант. так что мне побарабану)
одна пустышка, один квад краем касается пустышки. В итоге если сохранить начальный скейл одной из осейи потом скейлить пустышку по этой оси, то нормльный бар получается.


проект Mysterious Space. The losted moment

Сообщение отредактировал zaicev9797 - Четверг, 28 Июня 2018, 15:56
drcrackДата: Четверг, 28 Июня 2018, 15:57 | Сообщение # 13
старожил
Сейчас нет на сайте
Цитата
а я не через гуай, такие примитивные вещи можно и самому из плейнов собирать, как мне кажется вполне себе вариант. так что мне побарабану)
одна пустышка, один плейн краем касается пустышки. В итоге если скейлить пустышку по одной из осей нормльный бар получается.

т.е. вместо того чтобы просто сделать 1 Image и менять fillAmount простым однострочным скриптом ты вот эту всю схему замутил с рефлексией и каким-то плейнами? :D
kostyl driven development crazy
zaicev9797Дата: Четверг, 28 Июня 2018, 17:14 | Сообщение # 14
AbRaKaDaBrA
Сейчас нет на сайте
ну чтобы менять fillAmount мне бы всеравно пришлось бы мутить схему с рефлексией. Ну и никто не говорил что я вот прям узнал способ, и сразу пошел его юзать. Я лишь на заметку взял, что если вдруг мне придется насоздавать 100500 различных хелсбаров для 100500 разных переменных, то я таким методом воспользуюсь
а зачем я из плейнов собираю это все - вполне понятно тсановится из:
Цитата seaman ()
Зато OnGUI вызывается несколько раз за кадр...

Если мне придется делать что то более сложноое чем просто висящий сам по себе на экране бар, то я скорее всего это уже на UI буду делать.


проект Mysterious Space. The losted moment
orkonsДата: Четверг, 28 Июня 2018, 18:38 | Сообщение # 15
частый гость
Сейчас нет на сайте
"а зачем я из плейнов собираю это все - вполне понятно тсановится из:"
А события почему не пользуетесь, чтобы менять значения баров только когда меняется переменная хп?
zaicev9797Дата: Четверг, 28 Июня 2018, 19:28 | Сообщение # 16
AbRaKaDaBrA
Сейчас нет на сайте
чтобы использовать GUI надо сейчас сидеть вспоминать его все методы (за год службы благополучно все забывается и плюс когда начинали новый GUI вводить я только пощупать его успелл) . а чтобы отскейлить плейн по оси Х ничего вспоминать не надо :D
короче говоря в данный момент вермени для меня это было гораздо проще


проект Mysterious Space. The losted moment
seamanДата: Четверг, 28 Июня 2018, 21:25 | Сообщение # 17
старожил
Сейчас нет на сайте
В 2019 обещают ввести и в редакторе новый UI. Надеюсь тогда совсем уберут OnGUI.
Сделать бар на новом UI элементарно...
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » ссылка на переменную в инспекторе (адрес/указатель) (Есть ваще такое в шарпе в unity?)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг