This media is not supported in your browser
VIEW IN TELEGRAM
ScriptableObjects: Создание глоссария - часть 2
В этом посте мы наконец разберём вёрстку глоссария, иными словами реализация макета, на котором будет выводиться информация о наших противниках.
🛠Подготовка
Для начала нужно настроить холст. Нам понадобится лишь установить Scale With Screen Size, чтобы объекты Canvas масштабировались вместе с изменением размеров экрана, после чего нужно выставить эталонное разрешение - то, которое установлено у вас во вкладке Game. У меня, как вы видите, это 1920х1080.
Далее требуется разбить глоссарий на нижнюю и верхнюю область. Обратите внимание, что это сделано с использованием так называемых “якорей”(Anchors). Если говорить по простому, то якорь, это точка, к которой привинчивается объект на макете(Canvas). Это может быть середина холста, его нижний левый край или произвольная, выбранная вами точка. Также каждый якорь может быть прикручен к разным точкам, и тогда вместо указания позиции для объекта мы будем указывать отступы от якорей. Использование якорей это навык очень важный для вёрстки. Тема использования якорей достаточно важна, поэтому её нельзя игнорировать, но также эта тема не настолько велика, чтобы писать отдельный пост. Накидайте бананов, если хотите подробно разобрать позиционирование UI элементов на Canvas
❓Что нужно отображать?
После того, как мы установили базовый макет, нужно определиться с тем, что мы будем выводить на этом макете? В случае с нашими ScriptableObject`ами – это имя, здоровье и урон, то есть те самые параметры, которые мы определили для них в прошлом посте.
Чтобы выводить эту информацию нам понадобится объект с компонентом TextMeshPro – этот элемент вы сможете найти во вкладке UI во всплывающем окошке при попытке создать объект. Я создаю пары Label-Value, то есть объект, указывающий на тип значения и само значение, чтобы пользователь по подписи мог понять, что является здоровьем, а что уроном. Затем нужно лишь расставить эти элементы на холсте
🧐Кого нужно отображать?
Создав макет и добавив поля для вывода информации нам остаётся лишь добавить интерфейс для выбора противников, информацию о которых пользователь сможет узнать. Для этого в нижней части экрана я создаю кнопки – объекты Button, подписывая их так, чтобы пользователь понимал, какого противника он выберет для рассмотрения при нажатии.
✍🏻Итог
Теперь у нас есть набор конфигов, каждый из которых хранит информацию о конкретном противнике и макет глоссария, через который пользователь сможет рассмотреть информацию о каждом из противников. В следующем посте мы наконец добавим скрипты для управления этим макетом и установления связи между ним и конфигами, чем, наконец, закроем тему ScriptableObject. Ждите совсем скоро!
В этом посте мы наконец разберём вёрстку глоссария, иными словами реализация макета, на котором будет выводиться информация о наших противниках.
🛠Подготовка
Для начала нужно настроить холст. Нам понадобится лишь установить Scale With Screen Size, чтобы объекты Canvas масштабировались вместе с изменением размеров экрана, после чего нужно выставить эталонное разрешение - то, которое установлено у вас во вкладке Game. У меня, как вы видите, это 1920х1080.
Далее требуется разбить глоссарий на нижнюю и верхнюю область. Обратите внимание, что это сделано с использованием так называемых “якорей”(Anchors). Если говорить по простому, то якорь, это точка, к которой привинчивается объект на макете(Canvas). Это может быть середина холста, его нижний левый край или произвольная, выбранная вами точка. Также каждый якорь может быть прикручен к разным точкам, и тогда вместо указания позиции для объекта мы будем указывать отступы от якорей. Использование якорей это навык очень важный для вёрстки. Тема использования якорей достаточно важна, поэтому её нельзя игнорировать, но также эта тема не настолько велика, чтобы писать отдельный пост. Накидайте бананов, если хотите подробно разобрать позиционирование UI элементов на Canvas
❓Что нужно отображать?
После того, как мы установили базовый макет, нужно определиться с тем, что мы будем выводить на этом макете? В случае с нашими ScriptableObject`ами – это имя, здоровье и урон, то есть те самые параметры, которые мы определили для них в прошлом посте.
Чтобы выводить эту информацию нам понадобится объект с компонентом TextMeshPro – этот элемент вы сможете найти во вкладке UI во всплывающем окошке при попытке создать объект. Я создаю пары Label-Value, то есть объект, указывающий на тип значения и само значение, чтобы пользователь по подписи мог понять, что является здоровьем, а что уроном. Затем нужно лишь расставить эти элементы на холсте
🧐Кого нужно отображать?
Создав макет и добавив поля для вывода информации нам остаётся лишь добавить интерфейс для выбора противников, информацию о которых пользователь сможет узнать. Для этого в нижней части экрана я создаю кнопки – объекты Button, подписывая их так, чтобы пользователь понимал, какого противника он выберет для рассмотрения при нажатии.
✍🏻Итог
Теперь у нас есть набор конфигов, каждый из которых хранит информацию о конкретном противнике и макет глоссария, через который пользователь сможет рассмотреть информацию о каждом из противников. В следующем посте мы наконец добавим скрипты для управления этим макетом и установления связи между ним и конфигами, чем, наконец, закроем тему ScriptableObject. Ждите совсем скоро!
Media is too big
VIEW IN TELEGRAM
Пока готовится следующий пост по глоссарию решил поделиться с вами актуальным проектом. Вдохновился "ULTRAKILL" и решил создать свой FPS. Систему движений решил скопировать, а графику планирую сделать похожей на "Buckshot roulette". Пока тестирую физику, подбираю визуал и интерфейс. Как вам?
This media is not supported in your browser
VIEW IN TELEGRAM
ScriptableObjects: Создание глоссария - часть 3
Это завершающий пост цикла и в нём мы рассмотрим создание управляющего скрипта, который будет управлять отображением нужной информации.
🛠Проектирование
Прежде чем приступать к написанию скрипта, нужно определиться с задачами, которые он должен решать. Какого функционала мы ожидаем от нашего глоссария? Для такой системы можно придумать множество дополнительных фич, таких как: звуковой эффект при выборе, подсветка выбранной кнопки, изменение её размера, анимации и так далее. В нашем случае мы обойдёмся самым простым вариантом - изменение содержимого текстовых полей при нажатии на кнопки. Для этого будет достаточно одного скрипта, который будет содержать ссылки на нужные текстовые поля и публичный метод для вывода информации о враге. Давайте перейдём к реализации скрипта
🧑💻Код
Это весь код, необходимый для работы нашего глоссария. Мы используем обычный MonoBehaviour, в котором определяем три приватных поля. Благодаря модификатору [SerializeField] мы сможем указать ссылки через инспектор несмотря на приватность. Именно эти поля будет менять скрипт внутри своего публичного метода ShowEnemyInfo(). Как видно из кода, метод принимает один аргумент как раз того типа, который мы создавали в первом посте для хранения конфигов о противнике. Теперь всё готово и осталось добавить скрипт на сцену
⚙️Настройка
Скрипт можно установить на любой объект в сцене, главное это установить в нём ссылки на нужные текстовые объекты, которые и будут отображать соответствующие значения. После этого остаётся лишь добавить на каждую кнопку событие, в которое мы установим ссылку на объект с нашим скриптом и вызовем созданный нами метод, передав ему тот конфиг врага, который должна представлять кнопка.
✍🏻Итог
Теперь у нас есть полностью рабочая система глоссария, отображающая информацию о любом враге, которого мы выберем. Для масштабирования подобной системы достаточно лишь создать ещё больше конфигов и добавить больше кнопок!
Это завершающий пост цикла и в нём мы рассмотрим создание управляющего скрипта, который будет управлять отображением нужной информации.
🛠Проектирование
Прежде чем приступать к написанию скрипта, нужно определиться с задачами, которые он должен решать. Какого функционала мы ожидаем от нашего глоссария? Для такой системы можно придумать множество дополнительных фич, таких как: звуковой эффект при выборе, подсветка выбранной кнопки, изменение её размера, анимации и так далее. В нашем случае мы обойдёмся самым простым вариантом - изменение содержимого текстовых полей при нажатии на кнопки. Для этого будет достаточно одного скрипта, который будет содержать ссылки на нужные текстовые поля и публичный метод для вывода информации о враге. Давайте перейдём к реализации скрипта
🧑💻Код
using TMPro;
using UnityEngine;
public class GlossaryInfoShowController : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI _enemyName;
[SerializeField] private TextMeshProUGUI _hp;
[SerializeField] private TextMeshProUGUI _damage;
public void ShowEnemyInfo(Enemy enemyConfig)
{
_enemyName.text = enemyConfig.enemyName;
_hp.text = enemyConfig.hp.ToString();
_damage.text = enemyConfig.damage.ToString();
}
}
Это весь код, необходимый для работы нашего глоссария. Мы используем обычный MonoBehaviour, в котором определяем три приватных поля. Благодаря модификатору [SerializeField] мы сможем указать ссылки через инспектор несмотря на приватность. Именно эти поля будет менять скрипт внутри своего публичного метода ShowEnemyInfo(). Как видно из кода, метод принимает один аргумент как раз того типа, который мы создавали в первом посте для хранения конфигов о противнике. Теперь всё готово и осталось добавить скрипт на сцену
⚙️Настройка
Скрипт можно установить на любой объект в сцене, главное это установить в нём ссылки на нужные текстовые объекты, которые и будут отображать соответствующие значения. После этого остаётся лишь добавить на каждую кнопку событие, в которое мы установим ссылку на объект с нашим скриптом и вызовем созданный нами метод, передав ему тот конфиг врага, который должна представлять кнопка.
✍🏻Итог
Теперь у нас есть полностью рабочая система глоссария, отображающая информацию о любом враге, которого мы выберем. Для масштабирования подобной системы достаточно лишь создать ещё больше конфигов и добавить больше кнопок!
Та самая моделька оружия, которая используется в моём FPS. Уже делаю ещё 3 модельки
🔥4🌭1
Закончил ещё одну модельку. Думаю, что для тестов этого достаточно. Попробую добавить в игру подбор оружия, покачивания при движении и несколько видов стрельбы
Чёт я пропал куда-то, да? Тяжело уделять время каналу, но не переживайте, скоро смогу больше работать над проектами и делиться с вами всякими приколюхами. А пока ловите ещё одну прикольную пушку
❤6❤🔥2🔥1🤩1