Добавлен , опубликован

Изучаем CliCli

Содержание:
В редакторе существует 6 типов хранения данных:
  1. Глобальные переменные.
  2. Локальные переменные.
  3. Переменные объекта.
  4. Кастомные атрибуты (альтернативное название - Кастомные ключи).
  5. Таблицы.
  6. Переменные саб-триггера.
В данной подстатье мы разберем первые 4 типа хранения данных.

Переменные

Глобальные Переменные

Особенность глобальных переменных:
  • Для использования нужно создать глобальную переменную в менеджере переменных.
  • Может быть использована где-угодно.
  • Может быть любого типа переменной.
  • Может быть массивом. Индексом может быть только целое число.
Для чего используются?
  • В ситуациях, когда таблицы или кастомные атрибуты не подходят или не так удобны. Например, для создания перечисления или для создания временной переменной для тестирования.
  • Как константы.
Чтобы создать глобальную переменную, нужно открыть менеджер переменных, выбрать вкладку Global и нажать на кнопку New Variable. Чтобы воспользоваться переменной в триггере, используют действие "Variable - Set Variable".

Локальные Переменные

Особенность локальных переменных:
  • Для использования нужно создать локальную переменную в менеджере переменных.
  • Может быть использована только в пределах триггера.
  • Может быть любого типа переменной.
  • Может быть массивом. Индексом может быть только целое число.
Для чего используются?
  • Для хранения временной информации в пределах триггера. Например, индекс итератора или данные о юниту, которые будут в дальнейшем использованы в текущем триггере.
Чтобы создать локальную переменную, выберите триггер, в котором вы хотите создать локальную переменную. Далее, открываем менеджер переменных и находясь во вкладке "Local Variable" нажимает на кнопку New Variable. Чтобы воспользоваться переменной в триггере, используют действие "Variable - Set Variable".

Переменные Объекта

Особенность переменных объекта:
  • Для использования нужно создать переменную объекта в менеджере переменных.
  • Может быть использована только в пределах триггеров объекта.
  • Может быть любого типа переменной.
  • Может быть массивом. Индексом может быть только целое число.
Для чего используются?
  • Для хранения информации объекта. Например, счетчик способности или значение урона у модификатора, который увеличивается с каждым тиком.
Чтобы создать переменную объекта, откройте редактор объектов. Выберите объект. Далее откройте вкладку "Triggers" (в зависимости от типа объекта эта вкладка может быть или не быть. Например, для декорации нельзя создать триггеры). Теперь если в поле с триггерами нет триггера, создайте его. Открываем менеджер переменных и находясь во вкладке "Local Variable", выбираем папку "Variables" и нажимает на кнопку New Variable. Чтобы воспользоваться переменной в триггере, используют действие "Variable - Set Variable".

Отличия Между Глобальной, Локальной и Объектной Переменной

Скорее всего вы могли задаться вопросом - а зачем нам целых 3 типа разных переменных? Разве нам не будет достаточно глобальных переменных? Ответ на этот вопрос находится в деталях.
Немного упрощенной теории. Каждая сущность в редакторе это данные - картинка, число, строка, цвет и прочее. И каждая сущность хранится у вас в памяти компьютера в определенных местах. Когда мы обращаемся к сущности, мы начинаем её использовать, а по окончанию - сущность возвращается обратно на свое место. С того момента, как мы начали использовать сущность и до момента как мы положили ее на место - называется сроком жизни.
Когда мы открываем редактор - мы запускаем срок жизни редактора, а когда закрываем его, его срок жизни заканчивается. Точно также себя ведут и переменные, о которых мы говорили ранее, но каждая из них имеет свой срок жизни.
  • Глобальная переменная существует в переделах игровой сессии - мы можем обратится к ней во время игры в любой момент и её данные связаны на глобальном уровне.
  • Локальные переменные существуют в момент исполнения триггера и могут хранить информацию, только связанную с текущим триггером. Это значит, что если у нас есть 2 триггера, и в каждой из них есть локальная переменная, то мы не сможем обратится к локальной переменной №1 в триггере №2, и наоборот, так как на момент исполнения триггера №2 локальная переменная №1 - не существует.
  • Сроком жизни переменных объекта является промежуток, в котором существует объект.
Но как было сказано ранее, глобальные переменные могут быть использованы где-угодно. А так как объект или исполняемый триггер существуют до тех пор, пока существует сессия - значит в любую локальную переменную мы можем поместить данные из глобальной переменной. Также в триггерах объекта мы можем создать локальные переменные, а так как эти триггеры находятся в объекте, то мы можем поместить данные из переменной объекта в локальные переменных этих триггеров.
Чтобы было нагляднее, давайте увидим, как работают разные типы переменных на практике. Допустим, у нас есть 2 одинаковых юнита и у каждого из них есть способность. В способности у нас есть 3 счётчика, которые повышают число для глобальной, объектной и локальной переменной на 1 и выводит результат в Debug Log.
Теперь, давайте запустим сцену и выберем юнита №1. Дважды используем способность, а затем выберем юнита №2 и также дважды используем способность. По игру мы получим результаты:
После каждого нажатия, переменная local всегда равна 1. Когда мы используем способность, мы запускаем исполнение триггера, который создает локальную переменную local, задавая ей базовое значение 0. Затем мы прибавляем к переменной 1 и выводим в дебаг лог. После этого исполнение триггера заканчивается, а вместе с этим срок жизни локальной переменной заканчивается и она удаляется.
Первые два использования способности мы проводили на юните №1 с его способностью. Во время инициализации, был создан объект - юнит №1, а в нем объект-способность. В объекте-способности была создана переменная object (тоже самое произошло и с юнитом №2), которую мы затем повышали на 1 при каждом использовании способности. Пока мы применяли способность для юнита №1, мы не влияли на переменную object для юнита №2, по этому она осталась 0. Затем, когда мы начали применять способность для юнита №2, счетчик для object способности юнита №2 тоже начал увеличиваться.
Глобальная переменная не зависит ни от объектов, ни от триггеров, по этому повышалась на 1 при каждом применении. Единственное, что может сбросить счётчик глобальной переменной - это окончание сессии.

Кастомные Атрибуты

Нам осталось изучить ещё один тип хранения данных, давайте рассмотрим их особенности:
  • Для использования кастомных атрибутов не обязательно их создание, хотя это можно сделать заранее.
  • Для использования требуется ссылка на объект и строковой ключ.
  • Могут быть использованы где-угодно.
  • Могут быть почти любого типа переменных.
  • Нет могут быть массивом, но могут быть итерированы.
Для чего используются?
  • Для добавления к объекту неявных данных.
  • Как константы для объектов в Редакторе Объектов.
Чтобы воспользоваться кастомным атрибутом нам нужно 3 параметра: объект, строкой ключ и данные. Строковой ключ - это ключевое слово, по которому вы будете обращаться к данным в объекте. Чтобы поместить данные, нужно воспользоваться действием "Custom Value - Set Custom Key Value". В объект вы можете поместить почти любой тип данных.
Если мы хотим извлечь данные из кастомного атрибута, нужно воспользоваться действием "<Название типа переменной> Custom Key Value". Если можно найти во вкладке General для любого типа данных.
Обратите внимание. Когда мы помещаем в объект данные типа integer, то чтобы извлечь их, нам нужно извлекать данные в переменную типа integer. Если типы переменных, куда будут помещены извлеченные данные не совпадают, вы не сможете их извлечь.
Иными словами, если в объект вы поместили число 5 (integer), а затем попытаетесь извлечь его в переменную типа float, то вы не сможете этого сделать, так как вы будете извлекать из объекта данные типа float, а не данные типа integer.

Кастомные Атрибуты, как Константы

Также мы можем использовать кастомные атрибуты как константы для объектов. Для этого, нам нужно открыть редактор объектов и выбрать вкладку Custom Attributes.
Нажав на кнопку с плюсом в правой части редактора, мы сможем создать кастомный атрибут, задать ему имя, тип и данные.
Теперь мы можем использовать кастомный атрибут. Он будет помещен в объект, при его создании. Этот тип кастомных атрибутов ни чем не отличается от тех, что мы рассматривали выше, а значит он может быть получен и изменен таким же способом. Если вы собираетесь использовать данные из кастомного атрибута в триггерах объекта, хорошей идеей будет поместить данные в переменную объекта.
Для чего это нужно? Хорошей практикой является возможность настройки и изменения констант объектов без вникания в механизмы их работы. Это значительно снижает вероятность создания неполадок при изменении некоторых параметров.
Например, чтобы запустить автомобиль, вам нужно повернуть ключ зажигания. Как владельцу машины, вам не обязательно знать, какие процессы происходят внутри автомобиля, чтобы уметь управлять ею. Вы же не открываете капот и не запускаете двигатель вручную каждый раз, когда хотите воспользоваться автомобилем, верно?
Так и здесь: если все настроить правильно, то когда вы захотите изменить баланс или некоторые параметры объекта, вам не нужно будет лезть в триггеры, чтобы что-то изменить, с риском что-то сломать.

`
ОЖИДАНИЕ РЕКЛАМЫ...