Спасибо за попытку объяснить, но теперь мне стало ещё непонятнее. Чтобы прояснить ситуацию, я скажу, что впервые открыл Visual Studio четыре дня назад, до этого момента же панически боялся программирования, а любой код был для меня не понятнее иероглифов. Я бесконечно благодарен всем за то, что вы со мной возитесь и не отправляете читать мануалы для чайников (которые я честно пытался читать, но заканчивалось это головной болью и чувством полной беспомощности). Возможно, когда тебе за тридцать, начинать учиться чему-то новому не стоит, поскольку мозг усваивает информацию куда хуже, чем в 17, но раз уж я взялся за это, то хочу довести до конца.
Я уже разобрался с тем, что такое переменные и какие они бывают,чем отличаются Awake, Start и OnEnable, как работают элементы интерфейса и как выводить текст через скрипт в заранее прописанном поле. Однако я ещё очень много не понимаю, а воспринимать информацию способен только на примерах конкретных задач (чтобы получилось А, нужно сделать Б) на уровне "Если мы поставим перед переменной слово public, то сможем обратиться к ней из других скриптов. После оператора if условие выполнения действия надо писать в круглых скобочках, а то, что получится - в фигурных".
В моём представлении скрипт - это такая штука, в начале которого мы объявляем переменные, а потом идут функции (такие штуки с круглыми скобочками после названий и фигурными скобочками после круглых, которые работают как уравнения, то есть выполняют математические операции или алгоритмы), которые позволяют нам эти переменные как-то обрабатывать.
Поэтому фразы вроде " это обычные методы. На уровне компилятора их нет" вызывают у меня оцепенение. Я вроде бы понимаю каждое слово в отдельности, но вместе они не складываются для меня в осмысленное предложение.
Извините за это лирическое отступление, пожалуйста, просто я уже безумно злюсь на себя за свою тугодумность и нервы уже сдают.
Возвращаясь к get и set, вот то, что я, как мне кажется, понял:
get нужен для того, чтобы получить данные какой-либо переменной, не используя Update. То есть, если мы объявим какую-нибудь переменную и после её названия припишем { get { return название другой переменной или арифметические действия с другими переменными; } }, то эта самая переменная будет автоматически равна актуальному значению этой самой другой переменной или результату арифметических действий с этими переменными, не важно, как именно мы эти самые переменные изменили. При этом исходная переменная (название которой идёт до фигурных скобочек) исчезнет из инспектора. Но как это работает не с переменными, а с компонентами (например, с конкретным компонентом text класса Text, а точнее, с компонентом конкретного объекта класса Text) я так и не понял. То есть, как заставить его выводить всегда актуальное значение переменной, указанной в фигурных скобочках?
Для чего нужен set, я так и не понял. Нет, исходя из названия, логично, что нужен он, чтобы устанавливать новое значение какой-либо переменной. Но чем это будет отличаться от, скажем int = 7, я не понимаю. Из вашего примера
Используется csharp
int _x; // private переменная.
public int X {get {return _x;} set {_x = value; print(_x);}} // свойство.
я понял следующее:
1)
int _x;
Мы объявили приватную переменную _x (то есть, обратиться к ней мы можем только внутри этого скрипта).2)
public int X
Мы объявили публичную переменную X (на которую теперь можно ссылаться из других скриптов).3){get {
return _x;}
мы получаем значение приватной переменной _x.4)set {_x = value;
мы делаем что-то непонятное. Исходя из названия, мы приравняли публичную переменную X к приватной переменной _x.5)print(_x);}}
мы печатаем значение переменной _x.Таким образом, интерпретируя данный пример под мою ситуацию, получаю следующее:
Используется csharp
int _dexterity; // объявили статичную переменную. Кстати, почему с нижним подчёркиванием?
public int Dexterity {get {return _dexterity;} set {_dexterity = value; BattleController.DexterityText.text = "ваша ловкость равна " + _dexterity;}} // где BattleController - скрипт, в котором я задал переменную класса Text, назвал её DexterityText и в инспекторе перетащил на неё конкретный текстовый объект. Вот только проблема в том, что это не работает, поскольку DexterityText, чтобы на него можно было ссылаться из других скриптов, должен быть static, а если он staticб то он пропадает из инспектора и текстовый объект ему не назначить...
Если я правильно понял, то в результате мы получим надпись "Ваша ловкость равна X", где X будет автоматически обновляться при изменении переменной Dexterity (а значит, и _dexterity, ведь изменяя одну, мы автоматически изменяем и другую).
Вопрос в том, что делать, если нужно вывести актуальные значения нескольких переменных, например "ваш уровень владения этим видом доспехов = " + proficiency + "; Ваша броня даёт вам защиту, равную " + armour + ", а ваша ловкость равна " + dexterity;
И можно ли печатать этот текст из скрипта BattleController, к которому привязан конкретный текстовый объект, а не из скрипта Attributes, в котором хранятся значения характеристик proficiency, armour и dexterity и формулы, на них основанные, например AC = proficiency + armour + dexterity;