Страница 1 из 1

ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 11:26
Zaic
Предположим есть у меня какой то объект. Есть у него две переменных health и fuel и может потом я захочу к нему добавить еще shield.
И есть у меня два хелзбара для health и для fuel и потом я еще возможно захочу добавить бар для shield.
Мне очень лень писать практически один и тот же скрипт для каждого из хелзбаров, и менять там лишь только название переменной которую он берет из моего объекта.
Мне бы хотелось просто указывать в инспекторе адрес (ну типа как в плюсах к переменной можно либо по адресу либо по указателю добраться) или мб. имя переменной к которой конкретный хелзбар будет оращаться, т.к. в теории еще малоли для каких параметров кроме этих трех я захочу сделать бары, но алгоритм независимо от этого останется тем же.
Есть способ это сделать?

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 11:58
1max1
Не совсем понял что ты хочешь, но, у любого объекта, на котором висит скрипт можно, можно получить ссылку на этот самый скрипт и соответственно доступ к полям.

Синтаксис:
Используется csharp
public GameObject obj; // задается в инспекторе

void Start()
{
    MyScript script = obj.GetComponent<MyScript>();
    int health = script.health;
}

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 12:28
Zaic
нет, не правильно поняли. Суть в том что я хочу просто написать универсальный скрипт для хелзбара, в котором достаточно было бы просто указать ссылку на переменную не зависимо от того как называется эта переменная, из которой он будет брать значения, чтобы не создавать отдельно скрипты для каждого вида хелзбаров для рарзных параметров. В плюсах этом можно сделать с помощью передачи указателя на переменную или адреса пременной.

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 12:52
1max1
Сделай перечисление типа:

Синтаксис:
Используется csharp
enum Type
{
    HP,Fuel,Shield
}


Потом делай свой универсальный скрипт для своего бара, а в инспекторе когда раскидаешь скрипты по барам, поставишь нужный тип:

Синтаксис:
Используется csharp
public Type type;

void Update()
{
    switch (type)
    {
        case Type.HP: bla bla bla; break;
        // и т.д.
    }
}

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 13:27
Zaic
а моежт есть какой нибудь метод для поиска поля по имени в каком либо компоненте?

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 13:31
Zaic
а собственно вот вроде не так уж и сложно
Синтаксис:
Используется csharp
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);
    }
}

Re: ссылка на переменную в инспекторе (адрес/указатель)

СообщениеДобавлено: 28 июн 2018, 15:45
Tolking
ищи reflection... но лучше использовать interface.