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

Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 14:51
bond007in
Добрый день. Как превратить string в имя переменной?
Например:

public string ИмяПеременной;

ДругойОбъект.GetComponent<НазваниеСкрипта>().ИмяПеременной += 1;

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 14:59
~AvA~
Я ничего не понял, давай чуть-чуть по-нормальному попробуем :)

Есть скрипт, у него есть переменная типа string, этот скрипт висит на каком-то GameObject
Какой-то другой скрипт, получает эту переменную и чего ты хочешь с ней сделать?

Так же было бы неплохо указать, что сейчас происходит? Не компилируется? Какие-то ошибки? Где нормальный скрипт который ты используешь?
Не волнуйся, никто не украдёт твой скирпт, можешь смело его постить вот прям сюда

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 15:19
bond007in
~AvA~ писал(а):Я ничего не понял, давай чуть-чуть по-нормальному попробуем :)

Есть скрипт, у него есть переменная типа string, этот скрипт висит на каком-то GameObject
Какой-то другой скрипт, получает эту переменную и чего ты хочешь с ней сделать?

Так же было бы неплохо указать, что сейчас происходит? Не компилируется? Какие-то ошибки? Где нормальный скрипт который ты используешь?
Не волнуйся, никто не украдёт твой скирпт, можешь смело его постить вот прям сюда

Да все верно. Нужно обратиться с одного объекта к другому объекта, на котором добавить +1 к int. А имя этой переменной вписывать в поле string. Просто не охото писать для каждого объекта отдельный скрипт который по сути отличается только названием переменной.

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 15:53
1max1
Всего одно слово - рефлексия.

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 15:58
seaman
Есть куча скриптов, в каждом есть переменная int. Имена переменных - разные. Нужно независимо от имени переменной изменить этот int.
Верно?
Тогда удобнее всего - интерфейсы. Эти классы должны реализовать интерфейс с методом ChangeInt(value). При нужде изменить этот value - просто кастишь к интерфейсу и вызываешь метод.
Синтаксис:
Используется csharp
public interface IChangeInt {
  void ChangeInt(int value);
}

public myClass : IChangeInt  {
  private int ИмяПеременной;

  public void ChangeInt(int value) {
    ИмяПеременной += value;
  }
...
}

private myClass myvar;
...
var c = (IChangeInt )myvar;
c.ChangeInt(1);


Всего одно слово - рефлексия.

Рефлексия - мощная штука, но не всегда нужна...

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 16:08
bond007in
seaman писал(а):Есть куча скриптов, в каждом есть переменная int. Имена переменных - разные. Нужно независимо от имени переменной изменить этот int.
Верно?
Тогда удобнее всего - интерфейсы. Эти классы должны реализовать интерфейс с методом ChangeInt(value). При нужде изменить этот value - просто кастишь к интерфейсу и вызываешь метод.
Синтаксис:
Используется csharp
public interface IChangeInt {
  void ChangeInt(int value);
}

public myClass : IChangeInt  {
  private int ИмяПеременной;

  public void ChangeInt(int value) {
    ИмяПеременной += value;
  }
...
}

private myClass myvar;
...
var c = (IChangeInt )myvar;
c.ChangeInt(1);


Всего одно слово - рефлексия.

Рефлексия - мощная штука, но не всегда нужна...

Спасибо. Попробую разобраться.

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 16:46
lawson
Синтаксис:
Используется csharp
BroadcastMessage(имяПеременной, значение)

?

Re: Как задать имя переменной через string

СообщениеДобавлено: 26 фев 2019, 17:34
seaman
Давно не использую BroadcastMessage, но в свое время о ней писали как об очень медленной вещи.
Если уж так, то можно UnityEvent использовать или signal-ы из zenject