Для создания игры нам понадобится куча всяких данных: количество здоровья, имена персонажей, длина маршрута, время действия эликсира и многое другое. Давайте разберёмся где и как нам всё это хранить при использовании языка C# и Unity.
В языке C# много типов данных, но как правило при создании игры мы будем пользоваться только несколькими основными, а потому не будем забивать голову тем, что нам скорее всего не понадобится. :) Понадобятся нам как правило только bool, int, float и string.
1. Переменная типа bool
Переменная типа bool может хранить в себе только значение true или false (истина или ложь). Например, переменная "естьТопор" может нам поведать есть он у главного героя или нет. Ответы типа "есть, но только обух" или "топора нет, но есть кувалда" не принимаются! Только конкретика!
Причем, язык программирования C# тоже очень чёткий и конкретный - если мы объявляем переменную, например isAxe, то должны перед её названием указать её тип и ничего другого, кроме данных этого типа, переменная хранить уже не сможет.
Булевые переменные принято именовать с приставкой "is", но это не является непререкаемым правилом, просто так удобно читать. Кто-то добавляет префиксы в виде символа подчеркивания или дополнительных букв, вкладывая в них какие-то смыслы (_isAxe или b_isAxe), но я лично люблю краткость и лаконичность.
Переменные/поля принято писать с маленькой буквы, но каждое последующее слово выделять заглавной: areYouUnderstandMe = true;
Что ещё можно сохранить в такой переменной? Жив ли главный герой, находится ли он в прыжке, пройден ли уровень, открыта ли дверь, понят ли смысл булевой переменной...
Функции и методы в С#
Смысл понятен, но как нам это пригодится? Вызываем пояснительную бригаду с примерами! Внутри программы (класса) кроме переменных (они же поля) есть ещё и функции (они же методы), которые эти переменные могут использовать для своих корыстных целей. Идентификатор void и скобки () после названия UseAxe нам намекают на то, что мы имеем дело с таким методом.
Условный оператор if (если)
В фигурных скобках метода ниже мы видим условную конструкцию if (), которая при выполнении условия в скобках, выполнит то, что будет написано уже в её теле (фигурных скобках). А написан там сейчас просто комментарий, который вообще не является частью программы, а служит только для нас пояснением "что тут вообще происходит" или напоминанием "что мы тут собирались сделать". Всё что написано после двух косых черт // - не считается!
Так вот условный оператор if как раз работает с булевыми значениями (true или false). И если значение true, то начинает выполнять то, что внутри его скобок, а если false, то даже с дивана не встанет.
2. Переменная типа int (integer)
Переменная типа int может хранить в себе целые числа. И со знаком минус тоже. В такой переменной можно вполне хранить количество патронов, количество лошадей или землекопов - в общем, всё то, что не имеет смысл делить на мелкие части. Три с половиной землекопа будут работать также эффективно как и три, только еще с опаской озираясь на лежащую неподалеку половину землекопа.
Теперь давайте создадим метод ManageDiggers() и будем управлять количеством землекопов.
С умножением немного поменьше вариантов
А вот с делением есть нюанс!
Ну и давайте сделаем условную конструкцию с целыми числами и переменными, чтобы проверить достаточно ли у нас землекопов.
Но что если настанет зомби-апокалипсис и нам всё таки приспичит распилить одного землекопа? Тогда нам потребуется тип данных float!
3. Переменная типа float
Переменная типа float может хранить в себе дробные числа, как со знаком плюс, так и со знаком минус. Тут уже можно хранить всё делимое и всё, что требует особой точности, например зомби-землекопов, которые в любой комплектации спокойно себе ползают и чего-то копают. А также время, объём пива в кружке, координаты любимого трактира и даже степень того, насколько ты преисполнился в своём сознании, что все тебе теперь уже понятно.
Дробные числа на языке C# пишутся во-первых через точку, а во вторых с приставкой f. И никак иначе!
А вот и поучительный пример подъехал. Метод WeekEnd() вызывает метод DrinkBeer(), который на вход принимает значение типа int и использует его как внутреннюю переменную beer.
Целые числа сохранять в дробные переменные можно, а вот наоборот нельзя, иначе мы теряем ценные миллилитры пива!
А вот сравнивать дробные и целые числа можно без проблем!
4. Переменная типа string (строка)
Переменная типа string может хранить в себе символы, например, имя персонажа, название оружия, наименование товара или серийный номер алмазного меча.
Строковые переменные можно складывать между собой и даже сравнивать.
Условный оператор может содержать дополнение в виде else (иначе). Else содержит свою часть кода, которая выполнится в случае, если условие в скобках у if ложно.
Кроме того может содержать и множество условий else if (иначе если), истинность которых будет проверяться по очереди, если предыдущие условия ложные.
Привести числовое значение к строковому можно с помощью метода ToString(). Привести дробное число к целому, отбросив дробную часть, можно добавив (int) перед переменной.
Вот такая база! 4 основных типа переменных, методы, математические операции и условный оператор - это то, что нам нужно в первую очередь. Если статья была для вас полезна, то не поскупитесь поставить лайк и оставить комментарий. :) А если хотите продолжения, то подписывайтесь на канал и заглядывайте в подборку статей по разработке игры на Unity - там тоже много интересного!