Как сделать переменную в юнити
Variables and the Inspector
When creating a script, you are essentially creating your own new type of component that can be attached to Game Objects just like any other component.
Just like other Components often have properties that are editable in the inspector, you can allow values in your script to be edited from the Inspector too.
This code creates an editable field in the Inspector labelled “My Name”.
Unity создает метку в окне Inspector путем добавления пробела везде, где в имени переменной встречается заглавная буква. Однако это исключительно в целях отображения, и вы должны всегда в коде использовать имя переменной. Если вы отредактируете значение переменной и затем нажмете Play, вы увидите, что сообщение включает введенный вами текст.
In C#, you must declare a variable as public to see it in the Inspector. In UnityScript, variables are public by default unless you specify that they should be private:
Unity позволяет изменять значение переменных скрипта в запущенной игре. Это очень полезно чтобы увидеть эффекты от изменений сразу же, без остановки и перезапуска. Когда проигрывание оканчивается, значения переменных сбрасываются в то состояние, которое они имели до нажатия кнопки Play. Это гарантирует, что вы свободно можете играть с настройками объектов, не боясь что-то испортить.
Как сделать переменную в юнити
Рисование, Дизайн и Разработка игр
Главная » Unity3D: Основы использования скриптов для новичков: Подробнее о переменных
Unity3D: Основы использования скриптов для новичков: Подробнее о переменных
Переменные и свойства компонентов Unity3D
Переменные становятся свойствами компонента
Это настройка скрипта Soldier Controller (SoldierController.js)
Начинайте имя переменной со знаков нижнего регистра
Как видите, первая буква имени каждой переменной начинается со строчной буквы.
Сложносоставные имена переменных
Что-то было сделано не правильно? Нет, все правильно. Значения, которые вы назначаете переменным в скриптах, считаются значениями по умолчанию. Вы можете поправить значения в окне инспектора для получения более приемлемого поведения игрового объекта. Кроме того, такие поправки, устанавливаемые вами, сохраняются, означая, что вам не нужно будет постоянно вносить изменения в свой скрипт.
Примечание: Если вы вносите изменения в инспекторе во время работающей игры, то эти изменения теряются. Поэтому, во время внесения поправок в значения свойств, когда работает игра, записывайте все настройки, которые хотите выполнить сразу же, как только вышли из игры.
Просто имейте в виду, что ваши поправки не изменят скрипт вообще, они остаются наверняка, как только вы записали их в скрипте.
Вы можете сбросить значения в инспекторе
Чтобы обнулить значения в окне инспектора на первичные значения в скрипте:
Такие действия изменят значения свойств в инспекторе на первоначальные, определенные в скрипте.
Имена переменных и слово «type»
Как и в примере с почтовым ящиком, где я давал раннее представление о том, какие различные типы вещей могут находиться в почтовом ящике, переменные также могут содержать различные типы (прим. ред. — types) данных. Они могут содержать все что угодно, от простых чисел, таких как число 3, до целых игровых объектов и префабов.
Чтобы добавить переменные в скрипт, существует некоторая простая грамматика, которую вы должны усвоить.
Объявление переменных в скрипте
Обратите внимание, что объявление заканчивается точкой с запятой. Все объявления должны заканчиваться точкой с запятой, иначе, Unity не сможет понять, где заканчивается выражение, а где начинается новое. Так же, как использование точки в конце предложения. Вы когда-нибудь пробовали прочитать целую группу предложений без каких-либо точек? Может быть не просто. Вы бы поняли это, поскольку умны. Но Unity не может, потому что является всего лишь скромной компьютерной программой.
Еще одна очень важная вещь, которую вы должны запомнить, и которая, возможно, приведет к программным ошибкам. Во всем этом коде, который вы видите, довольно много знаков равенства (=). В программировании и в скриптах, это не знак равенства, а оператор присваивания. Поэтому, когда вы видите:
То это не означает, что переменная easyName равна 10. Это означает то, что переменной easyName присваивается значение 10.
Я расскажу о равенстве в следующем уроке.
Основные типы переменных
Вышеперечисленные типы являются самыми распространенными типами переменных практически в любом языке программирования.
Слово «Type» для переменной
Взгляните на строку 6. У этого выражения объявления что-то добавлено в конце. Что это за слово int?
Хорошо, взгляните на таблицу выше и посмотрите, что это слово означает integer.
Я создал переменную с именем easyNameTyped, за которой следует двоеточие, а затем int.
В системе скриптов Unity, вот как вы указываете Unity о том, что хотите, чтобы переменная содержала конкретный тип данных. Используйте двоеточие, за которым следует тип. Я специально указал Unity, что эта переменная должна будет содержать целочисленное значение, целое число.
Хорошо, и так вы, вероятно, хотите знать, почему другая переменная easyName не определила конкретный тип. Unity позволяет вам быть ленивым и не писать столько много кода, в то время как этого требуют другие языки программирования.
При написании скриптов, Unity обычно выясняет, какого типа будет переменная по присваиваемому ей значению. Читайте дальше.
Приведение типов
Вернемся к строке 4, а также к строке 5.
Способ заставить вас указывать типы — добавить #pragma strict в скрипт в качестве самой первой строки.
Тип float
Строка 15 является переменной с типом float. Это означает, что переменная будет сохранять десятичное число, которое содержит десятичную точку.
В данном примере я указал переменную withFloatTyped как десятичную в разделе объявлений, поэтому Unity знает наверняка, что может содержать переменная. Я также назначил переменной значение в разделе объявлений.
Тип boolean
Что это еще за тип boolean?
В окне инспектора Unity данный тип представлен в виде переключателя. Поэтому переменная типа boolean может иметь значение либо true либо false, отмечено или не отмечено.
Мы рассмотрим применение значений true и false позднее, когда доберемся до принятия решений в скриптах.
Тип String
Обратите внимание, что определяя переменную simpleStringTyped как переменную типа String, слово String начинается с большой буквы, а не с маленькой. Все потому что тип String является классом. Другие типы, int, float и boolean просто встроены как часть системы скриптового языка Unity.
Имена всех классов начинаются с большой буквы. Мы ознакомимся еще с объявлением переменных в качестве типов-классов позже, с такими как класс Transform, например.
Заключайте символы в двойные кавычки, чтобы сформировать строку из них.
Общедоступные переменные
Скрытые переменные
Я немного изменил строку 12. Я добавил слово private перед var. Оно означает то, что переменная withIntTyped не доступна для других скриптов. Ее может использовать только скрипт TeachMe.
Скрытые переменные не отображаются в окне инспектора Unity
Как видите, указание переменной withIntTyped скрытой, не позволяет ей отображаться в инспекторе.
Вывод
Введение в программирование C# на Unity
Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре ты обнаружишь, что тебе нужно выйти за пределы их возможностей, чтобы реализовать свои собственные особенности геймплея. Unity позволяет тебе создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на действия Игрока каким тебе угодно способом.
Unity поддерживает следующие языки программирования: C# и Javascript. Языки C# и Javascript считаются одними из самых популярных среди программистов. На C# пишутся программы для компьютера, веб приложения, а Javascript активно используется для создания интернет-страниц. В нашем случае:
Установка среды разработки
Чтобы писать скрипты, необходим редактор кода. В комплекте с Unity идет MonoDevelop, так что его не требуется устанавливать отдельно. Другой вариант — использовать Visual Studio — мы рекомендуем ее. Сменить среду разработки можно в настройках: Edit → Preferences, а затем выбери панель External Tools.
Вывод сообщения в консоль Unity
Когда ты напишешь свой первый код и добавишь его в Unity, Unity проверит код и, если в нем нет ошибок, произойдет компиляция.
Консоль (англ. — Console) – это панель в Unity, которая отображает ошибки в коде (отображаются красным значком), предупреждения (отображается желтым значком) и позволяет выводить справочную информацию (белый значок). По умолчанию эта панель отображается в нижней части программы в закладке Console. Если эта панель не отображается на экране, то в главном меню выбери Window → Console.
Консоль Unity
Чтобы создать скрипт выбери Assets → Create → C# Script. Имя скрипта должно быть обязательно на английском и начинаться с большой буквы. Открой созданный скрипт и напиши:
Скрипт не будет работать до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Ты можешь прикрепить скрипт перетащив его на игровой объект в окно Иерархия или через окно Инспектор выбранного игрового объекта.
Код, который должен вызываться один раз при старте программы, ты можешь написать внутри функции Start(), как в примере выше.
Код, который должен вызываться каждый кадр, ты можешь написать внутри функции Update().
Переменные
Если ты хочешь сохранить данные (количество жизней игрока, патронов или очков опыта), то для этого используются переменные. Переменные разделяются на типы, которых существует огромное множество.
Переменная — поименованная область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы. Переменные хранят в себе информацию разного типа, эти данные называют значением переменной. Для каждого типа данных есть свой тип переменной. Например:
Инициализация переменной
Все переменные в C# должны быть объявлены (инициализированы) до их применения. Например:
Задать значение переменной можно, в частности, с помощью оператора присваивания — знак «=». Кроме того, при объявлении переменной можно сразу задать ее значение. Например:
Переменные численных типов можно складывать, вычитать, умножать и делить:
+ — операция сложения;
— — операция вычитания;
* — операция умножения;
/ — операция деления.
А вот так сумму чисел можно вывести в консоль:
Счетчик времени с помощью Time.deltaTime
Практически во всех играх требуется знать сколько времени прошло с момента запуска игры (пример: игры на время). Но в Unity мы можем узнать только сколько прошло времени между кадрами (напоминаю, что игра – это набор кадров, которые быстро меняются. В одну секунду количество таких кадров может достигать 60 и больше).
Чтобы узнать сколько времени прошло между кадрами — используется Time.deltaTime.
Чтобы сделать дробное число целым, ставим перед ним (int).
Позиция объекта
Координаты объекта хранятся в компоненте Transform, свойство — position. Каждая координата имеет тип float. Вот так можно выводить координаты объекта в консоль:
Лайфхаки редактора Unity 3D. Часть 1: Атрибуты
Содержание
Предисловие
Здравствуйте, друзья! Заметил, что многие программисты пропускают богатые возможности Unity кастомизации редакторского интерфейса по тем или иным причинам. В этом цикле статей я распишу несколько совсем простых примеров, позволяющих облегчить жизнь геймдизайнерам и художникам, а также парочку примеров посложнее, но также легко реализуемых.
Большая часть взята из опыта использования, куда попала из родной документации движка. Вы легко можете сами найти необходимую информацию, поворошив документацию Unity 3D. Просто, по собственному опыту скажу, что у многих программистов либо нет времени, либо нет желания копаться в мантрах. Поэтому и выкладываю максимально краткое руководство по основным редакторским возможностям, которые я использовал на работе и в своих проектах.
Встроенные атрибуты
Я не буду расписывать все атрибуты, распишу лишь кратко те, которыми самому приходилось пользоваться.
Атрибуты к методам
Позволяет создать меню для доступа к статическому методу. Через “/” указывается иерархия. Можно располагать новые кнопки в стандартном главном меню движка, указывая путь, например “File/Create New Asset”.
Всего может содержать три параметра.
Также, если использовать элементы главного меню, то дополнительная кнопка будет появляться не только там, но и в контекстном меню на правую кнопку мыши. Например, в своем проекте, я добавил копирование пути к ассету.
Кроме того, на методы можно назначить горячие клавиши. Для этого, прямо в пути к меню нужно написать необходимую комбинацию. Для этого нужно использовать один из служебных символов+буква.
% — ctrl в Windows или cmd в OSX
# — shift
& — alt
В моем проекте, с копированием пути к ассету это выглядит так
Атрибуты к переменным
Можно сказать, это кастомный редактор для атрибута, который позволяет задать границы задаваемого значения через инспектор. Не клампит в реалтайме — только в инспекторе. Полезно, если задаете, например, вероятность выпадения предметов от 0 до 1 или от 0 до 100.
Задает подпись над сериализуемым полем, которая отображается в инспекторе.
Задает отступ в инспекторе.
Задает подсказку в инспекторе при наведении на сериализуемую переменную.
Позволяет сериализовать переменные вне зависимости от их области видимости. Очень полезный атрибут, который позволяет сделать все переменные класса приватными, но настраиваемыми в инспекторе.
Позволяет убирать сериализацию у паблик переменных. Очень не рекомендую данных подход. Уж лучше определить свойство get;set; и получать данные по нему. Кроме того, свойство можно сделать виртуальным и перегрузить, при необходимости, в классах наследниках. А тот факт, что оно публичное, позволяет использовать его в интерфейсах.
Позволяет скрыть сериализуемое поле в инспекторе. Неважно, будет оно публичным или приватным/протектным с атрибутом SerializeField.
Атрибуты к классам
ScriptableObject — очень полезный класс, который позволяет хранить условную базу данных в проекте, не прибегая к префабам. В проекте создаются объекты с созданным вами типом. Можно работать также, как с префабами, имеют свои преимущества и недостатки. Вообще, этот класс — тема для отдельной статьи, небольшой, но информативной.
Указанный выше атрибут позволяет создать в проекте объект с вашим типом, по тому пути, где вы открыли контекстное меню.
Позволяет работать скрипту в редакторе. В основном, полезно для постэффектов, поскольку позволяет сразу оценить результат в камере без запуска проекта. Но иногда можно использовать и для других целей.
Например, в качестве инициализатора сериализуемых полей встроенных типов, типа transform, renderer, rectTranform и т.п. Не рекомендовал бы повсеместно, лучше требовать ручной инициализации, либо написать редакторский скрипт, но иногда удобно.
Заставляет редактор требовать наличие определенного компонента на том же объекте, на котором висит скрипт с данным атрибутом. При добавлении сразу создает на том же объекте компонент указанного типа. Также запрещает удалять уже добавленный компонент.
Добавляет подменю в выпадающий список в меню Components →… и AddComponent. Удобно, если у вас большая библиотека кода и нужно организовать её в редакторе.
На этом, простая часть заканчивается и добавлю совсем немного в меру сложной.
Кастомные атрибуты (CustomPropertyDrawer)
Unity — Scripting API: PropertyAttribute
Unity — Scripting API: PropertyDrawer
Если вам недостаточно атрибутов приведенных выше, вы всегда можете воспользоваться API для написания собственных настраиваемых атрибутов. Реализация данного инструмента также достаточно проста и заключается в нескольких шагах. В данном примере, я опишу создание
собственного атрибута к переменной.
Во-первых, нужно определить класс-наследник от стандартного класса PropertyAttribute. Я сразу создам его с конструктором, в котором входящим параметром будет путь к списку того, что нам нужно использовать в атрибуте.
Во-вторых, после этого создаем скрипт редактора, в котором будем рисовать этот самый новый класс. Его нужно унаследовать от PropertyDrawer, а также написать к нему атрибут CustomPropertyDrawer.
Я называю классы наиболее общими наименованиями, дабы просто показать принцип использования настраиваемых.
База готова, теперь нам нужно нарисовать данный атрибут в том виде, в котором он нам нужен. В основном, атрибуты я использую в тех случаях, когда возможностей перечисления (enum) недостаточно, но нужно отрисовать выпадающий список с выбором.
Например, у вас есть база эффектов, у которой есть соответствие id → эффект. Вы храните где-то эту базу, неважно в ScriptableObject’e или на каком-то префабе. Вот простейшая реализация “хранилища”
Примечание — всегда создавайте в классах первое сериализуемое поле строковым. Из-за этого в списках элементы будут именоваться не как element 1, element 2. а таким образом, каким вы назначите переменную в инспекторе.
Для классов, с которыми я взаимодействую “извне”, я всегда пишу интерфейс. У каждого свой подход к этому моменту, но данный подход легко позволит, в случае чего, подменить класс только в одном месте на другой, а остальные так и будут работать с интерфейсом. Тем более, юнити поддерживает работу с интерфейсами в таких методах, как GetComponent(s)…, GetComponent(s)InChildren и т.п.
Интерфейс и класс эффекта
Интерфейс и класс контейнера
Обычно, объекты с такими данными я располагаю в ресурсах, потом беру оттуда. Можно расположить и просто в проекте и где необходимо определить ссылки. Но я иду по более простому и уже проверенному на не одной платформе пути.
Редактор
Осталось дописать редактор:
Заключение
Все приведенные выше «лайфхаки» могут упростить не только вашу работу (особенно когда проект разрабатывается несколько месяцев или лет), но и работу новичков, а также художников и геймдизайнеров. Не каждый специалист полезет в код. Конечно, хорошая организация и дисциплина может помочь и так документировать каждый компонент, но не всегда это получается, особенно у независимых разработчиков.
P.S.: Позже, напишу еще пару статей по другим типам апгрейдов редактора, в которые включу:
CustomEditor;
CustomPropertyDrawer;
EditorWindow;
Класс Debug и как его едят;
Класс Gizmos.
А также дополню примеры окном и пользовательским редактором. Пишите в комментариях, нужны ли подобные статьи или можно обойтись тем, что уже есть на Хабре.
Вступление:
Скажу честно, я не программист, так что вполне возможно будут какие-то неточности. Это не игровой туториал. Я постараюсь рассказать, как работают скрипты в Юнити 3Д.
С# относительно не сложный язык. Точнее сама основа языка простая, сложности начинаются, когда уже совсем далеко углубляешься в него. Но на самом деле с помощью Юнити3Д можно делать простенькие игрушки только используя основы С#. C# объектно ориентированный язык програмирования. Это пишут все, но как я понял большинство не особо понимает смысл этого, как и я. Но учитывая, что придется работать со скриптами, это не так и важно для начала. Не стоит пытаться создать один огромный трудно понимаемый скрипт для всей игры. Пробуйте разделить игру на части. В свою очередь эти части могут взамодействовать друг с другом. Используйте эти части как кирпичи для создания итоговой игры. В C# используется class, который исполняет роль кирпичика. В Юнити довольно просто создать такой class. Создаете новый C# скрипт и называете его по желанию. И, грубо говоря, созданный скрипт и выполняет роль class в Юнити3Д. Далее можно использовать скрипт как компонет для игрового объекта.
Небольшой пример:
Не забываем, это не игровой туториал, только вкратце о принципе работы с Юнити3Д.
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
// Use this for initialisation
void Start () <
>
//Update is called once per frame
void Update () <
>
>
Например мы хотим переместить астероид в центр при старте игры.
Если надо получить доступ на какой-то компонент игрового объекта, то обычно надо сделать следующие шаги:
1. Найти нужный игровой объект: Тут много разных вариантов, все зависит от условий.
— Можно использовать поиск из C# скрипта GameObject.Find («Name») / GameObject.FindWithTag («Tag»). Это поиск по имени или тэгу.
— можно создать переменную типа игровой объект public GameObject; и потом в эдиторе указать к какому объекту привязана эта переменная.
— можно получить линк на игровой объект с различных функций. Например: (Trigger, Raycast. ).
— и не нужен поиск объекта, если скрипт уже находится на этом объекте.
2. Получить доступ на компонент этого объекта: через команду gameobject.GetComponent (); или GetComponent (); если скрипт на том-же объекте.
Доступ к Transform компоненту:
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//Update is called once per frame
void Update () <
>
>
Если мы запустим нашу игру, то астероид будет перемещён в центр игрового мира.
Теперь посмотрим на Transform компонент:
Используйте команду transform. для доступа к Transform компоненту на том-же игровом объекте. И в нём можно изменить позицию, вращение и размер игрового объекта (пример: transform.localScale = new Vector3 (0.5F, 1, 1);). Ваш IDE (редактор) будет пытаться помочь в наборе команд и будут показанны различные возможные варианты.
Можно не только изменять переменные, но и просто запросить их значения.
Теперь посмотрим как работать с другими компонентами. У нашего астероида есть компонент для его отрисовки (рендерер).
Например мы хотим зеркально повернуть астероид вдоль y-оси. Так как наш скрипт уже прикреплён к астероиду, то нам не нужен его поиск в игровом мире. Мы можем получить доступ на компонент командой GetComponent ().. Название компонента можно посмотреть в инспекторе игрового объекта (только осторожно с пробелами). C# команда будет:
GetComponent SpriteRenderer >().flipY = true ;
И скрипт будет:
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//Update is called once per frame
void Update () <
>
>
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//Update is called once per frame
void Update () <
>
>
Похожим образом мы можем получить и доступ к компонентам на других игровых объектах.
Для начала нам надо «найти» другой игровой объект. Как я уже и писал, тут довольно много различных вариантов в зависимости от ситуации. Например в сцене есть другой игровой объект. Его имя Ship и тэг Player (Tag используется для идентификации объектов (похоже на имя, только скорость обработки быстрее)).
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;
//Update is called once per frame
void Update () <
>
>
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;
//Update is called once per frame
void Update () <
>
>
using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//декларация ссылочной переменной для компонента отрисовки спрайтов
SpriteRenderer sr;
//публичная ссылочная переменная для корабля игрока
public GameObject playerShip;
//Update is called once per frame
void Update () <
>
>
3. Мы можем получть объект с различных игровых функций. Я покажу некотрые из них в последующих туториалах (как пример: OnTriggerEnter2D (Collider2D otherCollider) <> Ссылка на объект попавший в триггер будет в otherCollider переменной).
Основы С# скриптов:
1. Переменные:
2. Ссылочные переменные классов:
3. Массивы (статические и динамические):
4. Модификаторы доступа:
5. Области видимости(действия) переменных:
Spoiler глобально в классе:
Переменная декларированная в классе, но не входящая в функции этого класса может быть использована глобально всеми функциями этого класса.
локально в функции:
Переменная декларированная в функции, может быть использована только в этой функции.
локально в цикле:
Область видимости такой переменной ещё меньше, она используется только локально в пределах цикла. using UnityEngine;
using System.Collections;
public class Moving : MonoBehaviour <
//переменная speed может быть использованна любой функцией этого класса
public int speed;
void RandomFunction () <
//переменная isMoving может быть использованна только в пределах RandomFunction () <. >
bool isMoving = true;
//переменная i может быть использованна только в пределах цикла
for ( int i = speed; i 0 ; i—) <
speed = i;
>
isMoving = false;
>
>
6: Арифметические операторы:
7. Математические функции:
8. Условия и логические операторы:
9. Циклы:
Spoiler for:
Этот цикл выполняется определённое количество раз. //для примера, декларация массива на 10 целых элементов
public int [] numbers = new int [ 10 ];
//int i = 0; декларация с инициализацией счетчика цикла
//i
//i++; изменение счетчика цикла
for ( int i = 0 ; i 10 ; i++) <
//исполняемая часть кода при каждом новом цикле
//в данном примере, заполнение массива числами от 0 до 9
numbers [i] = i;
> Хоть это и не обязательно, но советую использовать в счетчиках циклов целые значения, чтобы избежать ошибок от дробных вычислений.
while:
Этот цикл выполняется пока условие истинно. //для примера, декларация массива на 10 целых элементов
public int [] numbers = new int [ 10 ];
//декларация с инициализацией переменной к, которую будем использовать для проверки условия цикла
int k = 9 ;
//проверка условия цикла, выполнить цикл, если условие истинно
while (k >= 0 ) <
//выполняемый фрагмент кода в фигурных скобках
//заполнение массива числами от 9 до 0 в обратном порядке
numbers [k] = k; //уменьшение переменной на 1 (чтобы получить ложное условие)
k—;
> Будьте осторожны с циклами, чтобы не получить «вечный» цикл, когда условие всегда истинно и цикл повторяется вечно.
do. while:
Отличие этого цикла от цикла while только в том, что проверка условия производится после выполнения фрагмента кода. Поэтому этот цикл выполнится всегда как минимум один раз. //декларация публичной текстовой переменной
public string testText;
//декларация и инициализация целой переменной, для условия цикла
int j = 0 ;
10. Функции:
Spoiler стандартные функции от Юнити:
Существует много различных функций в Юнити. Тут я точно не смогу показать и малой части. Поэтому пока ограничимся несколькими примерами. В дальнейшем в туториалах будут попадаться и новые функции.