ИСПРАВЛЯЕМ КОД
Я для себя выработал правило, что код должен быть простым. Я могу сравнить код с книгой, а программиста с её автором. Чтобы понять хорошую книгу, не надо общаться с автором или читать его комментарии. С кодом тоже самое, поэтому сейчас расскажу, как мы изменили этот код, чтобы он стал “открытой книгой”:
1) Переименовали класс в Background Audio, убрали из имени несуществующую ответственность;
2) За ненадобностью убрали bool isBackground;
3) Переименовали свойство из IsGameAudioOn в лаконичный Muted. Вместо смены состояния вручную значение свойства теперь зависит от состояния AudioListener, что полностью исключает проблему некорректного состояния;
4) Непредсказуемый SwitchAudio сменили на четкий SetState с указанием состояния в параметре;
5) Выделили 2 публичных метода, включение/выключение, что позволило нам избавиться от SwitchGameAudio и OnInBackgroundChange;
6) Т.к. обработчики в данном случае являлись лишь прослойкой, которые вызывали смену состояния, решили избавиться от них и подписать напрямую методами Mute и Unmute. С точки зрения BackgroundAudio не так важно, что реклама закончилась или началась, нам гораздо важнее, что мы включаем или выключаем звук в ответ на это.
Вот такой код вышел. Мне кажется, что он стал меньше, логичнее и понятнее. Весь скрипт легко прочитать и без напряга понять, что за что отвечает и как он работает.
Если вам понравился такой формат, то покажите это бурными 👍, и я буду пилить эту рубрику дальше :)
Пишите в комментариях, что для вас самое главное в коде 👇
Я для себя выработал правило, что код должен быть простым. Я могу сравнить код с книгой, а программиста с её автором. Чтобы понять хорошую книгу, не надо общаться с автором или читать его комментарии. С кодом тоже самое, поэтому сейчас расскажу, как мы изменили этот код, чтобы он стал “открытой книгой”:
1) Переименовали класс в Background Audio, убрали из имени несуществующую ответственность;
2) За ненадобностью убрали bool isBackground;
3) Переименовали свойство из IsGameAudioOn в лаконичный Muted. Вместо смены состояния вручную значение свойства теперь зависит от состояния AudioListener, что полностью исключает проблему некорректного состояния;
4) Непредсказуемый SwitchAudio сменили на четкий SetState с указанием состояния в параметре;
5) Выделили 2 публичных метода, включение/выключение, что позволило нам избавиться от SwitchGameAudio и OnInBackgroundChange;
6) Т.к. обработчики в данном случае являлись лишь прослойкой, которые вызывали смену состояния, решили избавиться от них и подписать напрямую методами Mute и Unmute. С точки зрения BackgroundAudio не так важно, что реклама закончилась или началась, нам гораздо важнее, что мы включаем или выключаем звук в ответ на это.
Вот такой код вышел. Мне кажется, что он стал меньше, логичнее и понятнее. Весь скрипт легко прочитать и без напряга понять, что за что отвечает и как он работает.
Если вам понравился такой формат, то покажите это бурными 👍, и я буду пилить эту рубрику дальше :)
Пишите в комментариях, что для вас самое главное в коде 👇
👍74🔥9
Котаны, я увидел, что тема прокачки Unity вам зашла! И вы просили подробнее рассказать о работе с инструментами.
Мы с Ромой подумали и решили, что будет классно замутить интенсив. У меня в Azure скоро отпуск, и я решил целую неделю провести с вами.
Да, анонс!
с 6 по 11 декабря я буду в онлайне 24/7:
- Только живое общение;
- Трушный Code-review. Разберу код для вас на стриме;
- 2 лекции по вечерам 6 и 8 числа с 19:00 до 21:00 (МСК);
- В остальное время - проверка домашек и общение с вами в дискордике;
И самый сок 10 и 11 декабря: на два полных выходных мы разобьём вас на команды, чтобы вместе решать сложную техническую задачу, и параллельно будем давать Code Review.
p.s. Специальным гостем будет Рома, он также будет давать вам обратную связь)
Короче, по сути, замутим 5-дневную пыточную для вас.
ВАЖНО! Возьму только 40 человек, хотел бы больше, но не вывезу. Я хочу быть уверен, что проработаю все фишки индивидуально с каждым. Поэтому кто не успеет, прошу понять и простить.
По прайсу: 9 900 руб. Чекайте всю инфу на сайте.
Жду всех желающих, будет жарко 🔥
Мы с Ромой подумали и решили, что будет классно замутить интенсив. У меня в Azure скоро отпуск, и я решил целую неделю провести с вами.
Да, анонс!
с 6 по 11 декабря я буду в онлайне 24/7:
- Только живое общение;
- Трушный Code-review. Разберу код для вас на стриме;
- 2 лекции по вечерам 6 и 8 числа с 19:00 до 21:00 (МСК);
- В остальное время - проверка домашек и общение с вами в дискордике;
И самый сок 10 и 11 декабря: на два полных выходных мы разобьём вас на команды, чтобы вместе решать сложную техническую задачу, и параллельно будем давать Code Review.
p.s. Специальным гостем будет Рома, он также будет давать вам обратную связь)
Короче, по сути, замутим 5-дневную пыточную для вас.
ВАЖНО! Возьму только 40 человек, хотел бы больше, но не вывезу. Я хочу быть уверен, что проработаю все фишки индивидуально с каждым. Поэтому кто не успеет, прошу понять и простить.
По прайсу: 9 900 руб. Чекайте всю инфу на сайте.
Жду всех желающих, будет жарко 🔥
👍12🔥6⚡3
ПРОИЗВОДИТЕЛЬНОСТЬ В ИГРАХ
Меня бесит стандартный профайлер. Мне нужно больше цифр, больше данных о том, как работает моя игра. Иначе сидишь и тупо тыкаешь пальцем вслепую, пытаясь нащупать: “А чо вообще докрутить-то надо, куда жмать. Работай б**ть”.
И тут на днях вижу видос. Не от Сакутина, конечно, а от Unity (но тоже неплохо), и в нем рассказывают, как можно кастомизировать Unity Profiler. Давайте расскажу вам о своем видении всей этой истории
Вообще, кастомизация профайлера возможна в 3-х направлениях:
- Маркеры;
- Счетчики;
- Модули.
Для работы с кастомизацией я использую пакет profiling.core.
ОЧЕНЬ краткий гайд: в Package Manager нажимаем на добавление, выбираем пункт “Add package by name” и указываем com.unity.profiling.core в качестве имени.
Не хочу долбить вас многобуквием, поэтому сегодня только о маркерах:
У стандартного кода Unity очень много специальных маркеров, с которыми можно оценить время выполнения различных блоков кода и определить, какой блок требует оптимизации.
При помощи Profiling.Core я вставляю в свой код маркеры, которые отображаются в профайлере всего за 3 шага:
I. Подключить Unity.Profiling
II. Создать экземпляр маркера и указать в качестве аргумента имя маркера, отображаемое в профайлере.
Также возможна передача данных с маркером при помощи ProfilerMarker<Type>
III. При помощи using (_findPathMarker.Auto()) и фигурных скобок мы определяем область для проведения анализа скорости выполнения.
После этого в профайлере появляется маркер с данными о времени выполнения. Ну и всё, теперь есть 100%-я инфа о том, какая часть кода грузит систему больше всего, значит с ней и работаю дальше.
Это я всё к чему? Unity даёт разработчикам (занавес) всё больше возможностей для кастомизации, и те, кто используют их, чувствуют себя гигачадами с крутым инспектором и самописными расширениями. Хотите стать таким же классным? А у меня тут как раз скоро интенсив, где мы разберем ОТ и ДО, как создавать расширения для Unity.
👇 Пишите в комментариях, как вы оцениваете производительность в проектах. Накидайте реакции и совсем скоро поговорим о счетчиках (за ЖКХ естессна). Всех обнял :)
Меня бесит стандартный профайлер. Мне нужно больше цифр, больше данных о том, как работает моя игра. Иначе сидишь и тупо тыкаешь пальцем вслепую, пытаясь нащупать: “А чо вообще докрутить-то надо, куда жмать. Работай б**ть”.
И тут на днях вижу видос. Не от Сакутина, конечно, а от Unity (но тоже неплохо), и в нем рассказывают, как можно кастомизировать Unity Profiler. Давайте расскажу вам о своем видении всей этой истории
Вообще, кастомизация профайлера возможна в 3-х направлениях:
- Маркеры;
- Счетчики;
- Модули.
Для работы с кастомизацией я использую пакет profiling.core.
ОЧЕНЬ краткий гайд: в Package Manager нажимаем на добавление, выбираем пункт “Add package by name” и указываем com.unity.profiling.core в качестве имени.
Не хочу долбить вас многобуквием, поэтому сегодня только о маркерах:
У стандартного кода Unity очень много специальных маркеров, с которыми можно оценить время выполнения различных блоков кода и определить, какой блок требует оптимизации.
При помощи Profiling.Core я вставляю в свой код маркеры, которые отображаются в профайлере всего за 3 шага:
I. Подключить Unity.Profiling
II. Создать экземпляр маркера и указать в качестве аргумента имя маркера, отображаемое в профайлере.
Также возможна передача данных с маркером при помощи ProfilerMarker<Type>
III. При помощи using (_findPathMarker.Auto()) и фигурных скобок мы определяем область для проведения анализа скорости выполнения.
После этого в профайлере появляется маркер с данными о времени выполнения. Ну и всё, теперь есть 100%-я инфа о том, какая часть кода грузит систему больше всего, значит с ней и работаю дальше.
Это я всё к чему? Unity даёт разработчикам (занавес) всё больше возможностей для кастомизации, и те, кто используют их, чувствуют себя гигачадами с крутым инспектором и самописными расширениями. Хотите стать таким же классным? А у меня тут как раз скоро интенсив, где мы разберем ОТ и ДО, как создавать расширения для Unity.
👇 Пишите в комментариях, как вы оцениваете производительность в проектах. Накидайте реакции и совсем скоро поговорим о счетчиках (за ЖКХ естессна). Всех обнял :)
👍20🔥5⚡2❤1
РАСШИРЕНИЯ В РЕАЛЬНЫХ ПРОЕКТАХ
“А чо ты в Azur Games-то делаешь?” (cпойлер: крутые вещи). Если серьезно, то одна из задач моего отдела - это создание плееблов. Если вы подумали о чем-то формата "вытащи палочку, чтобы Фредди выплыл из GYM", то нет. Мы делаем крутые плееблы от Dungeon Masters, которые могут 1 в 1 повторять сложную механику оригинальной игры. Из недавнего - мы перенесли точь-в-точь механику Perfect Cream в плеебл без провисаний. Между прочим, это генерация меша на ходу, которая запускается на мобилке и весит 2.2мб!
Сам в восторге, но не всегда всё было так круто. Давайте об одной из проблем, с которыми мы сталкивались: минимальным разрешением считается 890х1920, и это нужно было учитывать при расстановке GO, особенно в проектах со статичной камерой. По итогу, мы разработаем под минимальное разрешение, а на более широком девайсе зона с игровыми объектами останется всё также узкая.
Проблема понятна. Что делать? Расширение вызвался сделать мой коллега, Илья Константинов. Спойлер: оно получилось очень удобным и красивым, и мне очень захотелось похвастаться мощью наших ребят.
Он написал систему сохранения информации о расположении, повороте и размере объектов в сцене. При смене пропорций экрана система переключалась между сохраненными данными. Причем она позволяет динамически изменять объекты на базе Transform и RectTransform. Зафиналили это всё написанием кастомного инспектора, который позволяет задать любому объекту на сцене желаемые значения трансформа для различных пропорций, тем самым добившись оптимального положения объектов для любого устройства.
Если вы хотите научиться писать такие же сексуальные расширения для редактора как и Илья, то вам повезло, ведь у меня тут как раз скоро интенсив, где мы с вами разберемся, как их создавать.
“А чо ты в Azur Games-то делаешь?” (cпойлер: крутые вещи). Если серьезно, то одна из задач моего отдела - это создание плееблов. Если вы подумали о чем-то формата "вытащи палочку, чтобы Фредди выплыл из GYM", то нет. Мы делаем крутые плееблы от Dungeon Masters, которые могут 1 в 1 повторять сложную механику оригинальной игры. Из недавнего - мы перенесли точь-в-точь механику Perfect Cream в плеебл без провисаний. Между прочим, это генерация меша на ходу, которая запускается на мобилке и весит 2.2мб!
Сам в восторге, но не всегда всё было так круто. Давайте об одной из проблем, с которыми мы сталкивались: минимальным разрешением считается 890х1920, и это нужно было учитывать при расстановке GO, особенно в проектах со статичной камерой. По итогу, мы разработаем под минимальное разрешение, а на более широком девайсе зона с игровыми объектами останется всё также узкая.
Проблема понятна. Что делать? Расширение вызвался сделать мой коллега, Илья Константинов. Спойлер: оно получилось очень удобным и красивым, и мне очень захотелось похвастаться мощью наших ребят.
Он написал систему сохранения информации о расположении, повороте и размере объектов в сцене. При смене пропорций экрана система переключалась между сохраненными данными. Причем она позволяет динамически изменять объекты на базе Transform и RectTransform. Зафиналили это всё написанием кастомного инспектора, который позволяет задать любому объекту на сцене желаемые значения трансформа для различных пропорций, тем самым добившись оптимального положения объектов для любого устройства.
Если вы хотите научиться писать такие же сексуальные расширения для редактора как и Илья, то вам повезло, ведь у меня тут как раз скоро интенсив, где мы с вами разберемся, как их создавать.
👍16🔥5⚡1😁1🤔1
Привет, котаны 🌚
У меня тут скоро интенсив начинается, а в комментариях и в личку прилетают вопросы по типу "Я не так давно изучаю Unity, но хотел бы записаться на интенсив, какие знания нужны для прохождения?"
Написание расширений для Unity - это не та тема, которая входит в большинство курсов, ведь не является обязательной для трудоустройства.
Можно сказать, что это отдельная ветка прокачки Unity-специалиста с несколькими перками, которая открывает для него уйму новых возможностей, а также разблокирует перк для собеса под названием "Повыпендриваться своими расширениями и показать, что ты полезнее, чем кажешься на первый взгляд", ведь нужда в расширениях есть всегда, а пишут их далеко не все.
Что же нужно для лучшего усвоения интенсива?
Сверим темы по чек-листу:
- Поля и свойства (Куда без них?)
- ENUM
- Коллекции
- Методы
- Желание впитывать большое количество информации 🧠
- События
- Работа с записью и чтением файлов (на самом деле, не обязательно, я расскажу)
- Статичные классы и методы
- Чуточку понимания наследования
- Боевой настрой 🦾
Как вы могли заметить, великим программистом для понимания расширений быть не нужно, но по мере прокачки навыка программирования вы сможете найти больше применений для расширений и легко выбить сочный райз!
Кстати говоря, программа получается довольно сочной, накидайте 🔥 и я расскажу вам о ней во всех подробностях!)
У меня тут скоро интенсив начинается, а в комментариях и в личку прилетают вопросы по типу "Я не так давно изучаю Unity, но хотел бы записаться на интенсив, какие знания нужны для прохождения?"
Написание расширений для Unity - это не та тема, которая входит в большинство курсов, ведь не является обязательной для трудоустройства.
Можно сказать, что это отдельная ветка прокачки Unity-специалиста с несколькими перками, которая открывает для него уйму новых возможностей, а также разблокирует перк для собеса под названием "Повыпендриваться своими расширениями и показать, что ты полезнее, чем кажешься на первый взгляд", ведь нужда в расширениях есть всегда, а пишут их далеко не все.
Что же нужно для лучшего усвоения интенсива?
Сверим темы по чек-листу:
- Поля и свойства (Куда без них?)
- ENUM
- Коллекции
- Методы
- Желание впитывать большое количество информации 🧠
- События
- Работа с записью и чтением файлов (на самом деле, не обязательно, я расскажу)
- Статичные классы и методы
- Чуточку понимания наследования
- Боевой настрой 🦾
Как вы могли заметить, великим программистом для понимания расширений быть не нужно, но по мере прокачки навыка программирования вы сможете найти больше применений для расширений и легко выбить сочный райз!
Кстати говоря, программа получается довольно сочной, накидайте 🔥 и я расскажу вам о ней во всех подробностях!)
🔥47👍4⚡1🤔1
УЛУЧШАЕМ ИНСПЕКТОР БЕЗ РАСШИРЕНИЙ
Для каждого инспектора написать расширение нереально. Несмотря на все плюсы, это овер до*уя кода, а значит много работы. Это факт, грустный, но факт. И что делать? А чо насчёт атрибутов)
Атрибуты - это маркеры, указывающие на особое поведение. Их размещают над классами, методами и полями. Сегодня без лонгридов и по делу расскажу только про атрибуты, которые влияют на инспектор и размещаются над полями.
Ловите список тех, которые я сам юзаю в работе:
- SerializeField - отображает приватное поле в инспекторе;
- Range[Min,Max] - делает из числового поля слайдер с диапазоном значений от Min до Max;
- Multiline - расширяет текстовое поле, добавляя возможность писать более 1 строки текста;
- Header("Name") - создает заголовок с текстом Name, которым вы сможете разграничить несколько смысловых блоков с полями;
- Space(Height) - создает пустое пространство перед полем.
👇 Делитесь в комментах атрибутами, которые используете чаще всего
Для каждого инспектора написать расширение нереально. Несмотря на все плюсы, это овер до*уя кода, а значит много работы. Это факт, грустный, но факт. И что делать? А чо насчёт атрибутов)
Атрибуты - это маркеры, указывающие на особое поведение. Их размещают над классами, методами и полями. Сегодня без лонгридов и по делу расскажу только про атрибуты, которые влияют на инспектор и размещаются над полями.
Ловите список тех, которые я сам юзаю в работе:
- SerializeField - отображает приватное поле в инспекторе;
- Range[Min,Max] - делает из числового поля слайдер с диапазоном значений от Min до Max;
- Multiline - расширяет текстовое поле, добавляя возможность писать более 1 строки текста;
- Header("Name") - создает заголовок с текстом Name, которым вы сможете разграничить несколько смысловых блоков с полями;
- Space(Height) - создает пустое пространство перед полем.
👇 Делитесь в комментах атрибутами, которые используете чаще всего
🔥28👍7🤔2🥴1🐳1
Доброго дня и хороших выходных, котаны)
У нас с Ромой скоро стартует интенсив. Ваша активность под недавним постом о навыках просто 🥰
Выполняю обещание и рассказываю поподробнее про программу курса👇
У нас будет 2 лекции + закрепление материала через дз и 2 дня практики:
Лекция №1 - Написание расширений для редактора при помощи CustomEditor и визуализация данных с OnSceneGUI + Handles
За два часа разберем:
- Структуру расширений редактора;
- Все возможные элементы, которые используются в кастомном инспекторе;
- GUILayoutOption для более точной настройки элементов;
- Немного GUI. skin для создания сочных отдельных блоков;
- Горизонтальные и вертикальные группы;
- Создание красивых кнопок с любыми иконками или значками;
- Создание блоков с возможностью их сворачивания;
- Визуализация данных при помощи OnSceneGUI + Handles;
- Практическая отработка навыков на 2-3 примерах.
В конце отвечу на все ваши вопросы)
Лекция №2 - Написание расширений в отдельных окнах при помощи EditorWindow.
За 2-3 часа разберем:
- В чем отличие кастомизации инспектора от написания отдельных окон;
- Как создать дополнительные окна Unity, которые открываются из меню;
- Как зонировать окно;
- Модификацию внешнего вида окна;
- Пак небольших уникальных элементов;
- Как построить сетку и рисовать внутри окна;
- Напишем 3 расширения для Unity
Ну и, конечно, отвечу на все вопросы.
Практические дни
На два полных выходных (10 и 11 декабря) мы разобьём вас на команды, которые будут решать сложную техническую задачу. Параллельно с этим Code Review ваших работ на протяжении всего дня.
А ещё всем закину свой pdf, в котором собрал всю документацию по разработке расширений)
Пост выходит слишком большим и пришлось чуть сократить, в курсе будет ещё больше приятностей :3
Как вам план? Уже во вторник стартует жесткая и плотная работа в Dungeon, не призываю, но и не хочу, чтобы потом кто-то обижался, из 40 мест осталось совсем немного. Все подробности здесь
У нас с Ромой скоро стартует интенсив. Ваша активность под недавним постом о навыках просто 🥰
Выполняю обещание и рассказываю поподробнее про программу курса👇
У нас будет 2 лекции + закрепление материала через дз и 2 дня практики:
Лекция №1 - Написание расширений для редактора при помощи CustomEditor и визуализация данных с OnSceneGUI + Handles
За два часа разберем:
- Структуру расширений редактора;
- Все возможные элементы, которые используются в кастомном инспекторе;
- GUILayoutOption для более точной настройки элементов;
- Немного GUI. skin для создания сочных отдельных блоков;
- Горизонтальные и вертикальные группы;
- Создание красивых кнопок с любыми иконками или значками;
- Создание блоков с возможностью их сворачивания;
- Визуализация данных при помощи OnSceneGUI + Handles;
- Практическая отработка навыков на 2-3 примерах.
В конце отвечу на все ваши вопросы)
Лекция №2 - Написание расширений в отдельных окнах при помощи EditorWindow.
За 2-3 часа разберем:
- В чем отличие кастомизации инспектора от написания отдельных окон;
- Как создать дополнительные окна Unity, которые открываются из меню;
- Как зонировать окно;
- Модификацию внешнего вида окна;
- Пак небольших уникальных элементов;
- Как построить сетку и рисовать внутри окна;
- Напишем 3 расширения для Unity
Ну и, конечно, отвечу на все вопросы.
Практические дни
На два полных выходных (10 и 11 декабря) мы разобьём вас на команды, которые будут решать сложную техническую задачу. Параллельно с этим Code Review ваших работ на протяжении всего дня.
А ещё всем закину свой pdf, в котором собрал всю документацию по разработке расширений)
Пост выходит слишком большим и пришлось чуть сократить, в курсе будет ещё больше приятностей :3
Как вам план? Уже во вторник стартует жесткая и плотная работа в Dungeon, не призываю, но и не хочу, чтобы потом кто-то обижался, из 40 мест осталось совсем немного. Все подробности здесь
🔥21👍4🤡2👏1🤔1👌1
ЗАВТРА СТАРТУЕМ
Котаны, час Х близок. Уже завтра начнём прокачивать Unity, и врата вВАЛЬХАЛЛУ 5-дневный напильник для вас откроются.
Осталась пара свободных мест, кто хочет залететь, ещё есть шанс ворваться. Все подробности здесь!
А я пойду завершать финальные приготовления, страдать х*йней эту неделю я вам точно не дам 🔥
Котаны, час Х близок. Уже завтра начнём прокачивать Unity, и врата в
Осталась пара свободных мест, кто хочет залететь, ещё есть шанс ворваться. Все подробности здесь!
А я пойду завершать финальные приготовления, страдать х*йней эту неделю я вам точно не дам 🔥
🔥13👍3👌2🤔1🤡1
Фух, привет, котаны 😼
Потерялся на неделю, но не из-за безделья. Плотно поработал с ребятами на тренинге по созданию расширений для Unity. Рассказываю, как все прошло:
Я подготовил материала на 4 часа по два на каждую лекцию (ага, если бы…), но так получилось, что на первой лекции за 3 часа я объяснил только процентов 80 из всего материала.
Пришлось в срочном порядке провести ещё одну часовую лекцию сверху на следующий день, из-за чего финальная лекция сдвинулась на пятницу, впритык к практикуму.
Наученный опытом первой лекции, я переработал вторую, и уже она прошла прям з*бись, от ребят прилетел хороший фидбек!
Дальше была ПРАКТИКА. Распределили всех на команды, каждая из которых должна была запилить своё расширение для постройки уровня. Суть расширения: Префабы закидываются в специальную сгенерированную папку, расширение их вытягивает и строит грид с превьюшками, из которого можно выбирать устанавливаемый префаб, причем у нас таких каталогов может быть несколько, переключаются при помощи тулбара.
Ребята бились над задачей как львиные тигры, а я 2 дня нон-стоп был на саппорте и помогал разруливать проблемы, с которыми команды сталкивались.
Вобщем, все ребята были реально толковые, очень заряжали меня и друг друга. Но самое крутое, что все вовлеклись в интенсив и е*ашили от души.
Кстати говоря, больше всего ребятам зашла командная работа. Некоторые сработались настолько, что задумались над совместным проектом после интенсива.
Мне приятно работать с такими людьми, а код-ревью в онлайне порадовал ещё больше, не без ошибок, конечно, но за все работы мы проговорили много крутых приемов. Накидайте🔥и я разберу пару кейсов с интенсива.
В общем и целом ребята оценили тренинг по достоинству, о чем говорят душевные отзывы, которые греют сердце. Всем спасибо, было пизд*то! :3
Потерялся на неделю, но не из-за безделья. Плотно поработал с ребятами на тренинге по созданию расширений для Unity. Рассказываю, как все прошло:
Я подготовил материала на 4 часа по два на каждую лекцию (ага, если бы…), но так получилось, что на первой лекции за 3 часа я объяснил только процентов 80 из всего материала.
Пришлось в срочном порядке провести ещё одну часовую лекцию сверху на следующий день, из-за чего финальная лекция сдвинулась на пятницу, впритык к практикуму.
Наученный опытом первой лекции, я переработал вторую, и уже она прошла прям з*бись, от ребят прилетел хороший фидбек!
Дальше была ПРАКТИКА. Распределили всех на команды, каждая из которых должна была запилить своё расширение для постройки уровня. Суть расширения: Префабы закидываются в специальную сгенерированную папку, расширение их вытягивает и строит грид с превьюшками, из которого можно выбирать устанавливаемый префаб, причем у нас таких каталогов может быть несколько, переключаются при помощи тулбара.
Ребята бились над задачей как львиные тигры, а я 2 дня нон-стоп был на саппорте и помогал разруливать проблемы, с которыми команды сталкивались.
Вобщем, все ребята были реально толковые, очень заряжали меня и друг друга. Но самое крутое, что все вовлеклись в интенсив и е*ашили от души.
Кстати говоря, больше всего ребятам зашла командная работа. Некоторые сработались настолько, что задумались над совместным проектом после интенсива.
Мне приятно работать с такими людьми, а код-ревью в онлайне порадовал ещё больше, не без ошибок, конечно, но за все работы мы проговорили много крутых приемов. Накидайте🔥и я разберу пару кейсов с интенсива.
В общем и целом ребята оценили тренинг по достоинству, о чем говорят душевные отзывы, которые греют сердце. Всем спасибо, было пизд*то! :3
🔥44👍6🤯2⚡1
А вот и реальное расширение подъехало
Очень хочу показать вам, как работает расширение от команды ISeniorLvlGodAzurRank8, пацаны вообще ребята, они сделали его за 2 дня практики. Тут respect+ не иначе, поддержите ребят 👍
Ну и пишите в комментах, что думаете о расширении и хотите ли его подробный разбор
https://www.youtube.com/watch?v=op6OagFavPs
Очень хочу показать вам, как работает расширение от команды ISeniorLvlGodAzurRank8, пацаны вообще ребята, они сделали его за 2 дня практики. Тут respect+ не иначе, поддержите ребят 👍
Ну и пишите в комментах, что думаете о расширении и хотите ли его подробный разбор
https://www.youtube.com/watch?v=op6OagFavPs
YouTube
ISeniorLvlGodAzurRank8 -BuildCity
👍22🔥4😁2
ПРАКТИЧЕСКАЯ ЧАСТЬ 🧑💻
Всем привет) Зафиналиваю рассказ об интенсиве, и наконец настала очередь практики. Собсна, “Какое было задание?”. Задание дал по харду: “Написать расширение, помогающее левелдизайнеру строить уровни”. Давайте закину вам ТЗ, может кто-то захочет повторить))
1. Размещаемые объекты должны быть префабами для удобства настройки геймплея;
2. Префабы должны браться из сгенерированной папки, куда разработчик поместит префаб после его настройки;
3. В расширении префабы выводятся в сетку, которая должна подстраиваться под размер окна;
4. У каждого элемента должна быть превьюшка, но сделанная не вручную;
5. Все префабы должны быть разделены на каталоги, по типу "постройка", "окружение" и тд;
6. При помощи клавиатуры добавить возможность поворота;
7. При активации кнопки постройки и перемещении указателя на сцену должно появиться превью постройки;
8. Постройки не должны ставиться одну в другую.
Звучит сложно, но до этого на теории мы разобрали всю базу для этого, включая работу с файлами и всеми элементами GUILayour.
А зачем вообще упоролись в практику, ведь могли за 2 дня еще чо-нить разобрать? Странный вопрос (я сам его придумал) думаю итак все понимаете на*уя нужна практика. Но все-таки, я очень хотел, чтобы все участники:
А) Закрепили пройденный материал;
Б) Погрузились в реальный небольшой спринт и поняли, как это работает в реальности;
В) Научились работать в команде и распределять задачи.
Ну и да, все получилось. Распределили команды +- равномерно по опыту разрабов, каждый прочувствовал на себе, что такое спринт и как это выматывает, когда до дедлайна час. Особенно порадовало как ребята адекватно раскидали таски между собой без прожект манагеров))
А результат вы уже видели в прошлом посте, и если хотите увидеть разбор кода, то накидайте реакций, и будем долбить дальше 🔥
Всем привет) Зафиналиваю рассказ об интенсиве, и наконец настала очередь практики. Собсна, “Какое было задание?”. Задание дал по харду: “Написать расширение, помогающее левелдизайнеру строить уровни”. Давайте закину вам ТЗ, может кто-то захочет повторить))
1. Размещаемые объекты должны быть префабами для удобства настройки геймплея;
2. Префабы должны браться из сгенерированной папки, куда разработчик поместит префаб после его настройки;
3. В расширении префабы выводятся в сетку, которая должна подстраиваться под размер окна;
4. У каждого элемента должна быть превьюшка, но сделанная не вручную;
5. Все префабы должны быть разделены на каталоги, по типу "постройка", "окружение" и тд;
6. При помощи клавиатуры добавить возможность поворота;
7. При активации кнопки постройки и перемещении указателя на сцену должно появиться превью постройки;
8. Постройки не должны ставиться одну в другую.
Звучит сложно, но до этого на теории мы разобрали всю базу для этого, включая работу с файлами и всеми элементами GUILayour.
А зачем вообще упоролись в практику, ведь могли за 2 дня еще чо-нить разобрать? Странный вопрос (я сам его придумал) думаю итак все понимаете на*уя нужна практика. Но все-таки, я очень хотел, чтобы все участники:
А) Закрепили пройденный материал;
Б) Погрузились в реальный небольшой спринт и поняли, как это работает в реальности;
В) Научились работать в команде и распределять задачи.
Ну и да, все получилось. Распределили команды +- равномерно по опыту разрабов, каждый прочувствовал на себе, что такое спринт и как это выматывает, когда до дедлайна час. Особенно порадовало как ребята адекватно раскидали таски между собой без прожект манагеров))
А результат вы уже видели в прошлом посте, и если хотите увидеть разбор кода, то накидайте реакций, и будем долбить дальше 🔥
🔥37👍3⚡2🤡1
Привет, котаны)
Я сел заниматься разбором LevelBuilder и встал в небольшой тупик. Скрипт вышел под 300 строк, что для расширений так-то адекватно, но есть где сократить. В одном посте все не поместится, и мне кажется, что лучше сделать серию постов по самым горячим темам.
👇 Ниже скину опрос)
Я сел заниматься разбором LevelBuilder и встал в небольшой тупик. Скрипт вышел под 300 строк, что для расширений так-то адекватно, но есть где сократить. В одном посте все не поместится, и мне кажется, что лучше сделать серию постов по самым горячим темам.
👇 Ниже скину опрос)
👍11🔥5👌2
Собственно, к чему я это всё? Мне нужна ваша помощь: какую тему вы хотите видеть в разборе больше всего?
Напишите в комментах свои пожелания, и уже завтра я выкачу первый пост, который выберете вы :3
Напишите в комментах свои пожелания, и уже завтра я выкачу первый пост, который выберете вы :3
Anonymous Poll
27%
Разбор механик расширения
22%
Рефакторинг кода для сокращения размера
30%
Интересные приемы из кода
18%
Разбор ошибок и возможных улучшений
2%
Версия в комментах
👍7🔥5👌1
РАЗБОР ВВОДА В РАСШИРЕНИЯХ
Спасибо за участие и комменты в опросе :3 Как и обещал, закидываю пост)
Во время практики ребятам нужно было сделать управление размером/поворотом объекта при помощи нажатия клавиш. Вроде все изи, но есть нюанс: ввод, который мы используем в плеймоде, отличается от ввода в редакторе.
Ситуация такая, класс Input для редактора недоступен, но есть класс Event с информацией о пользовательском вводе или рендеринге окна. Для каждого вызова OnGUI в скриптах создается новый Event, т.е. каждый метод отрисовки в редакторе может создать новый Event и значит их может быть несколько.
Остается вопрос: как мне определить нужное событие и вычленить из него нажатие клавиши?
Я смотрю на статическое свойство current, содержащее в себе Event. Он обрабатывается прямо сейчас в том скрипте, где я обращаюсь к этому свойству. И при помощи поля type я определяю, что за событие сейчас происходит, и провожу сравнение с желаемым событием из EventType.
После проверки события дело остаётся за малым, я уже знаю, что тип события - это нажатие на клавишу, а значит, могу обратиться к полю keyCode, которое хранит код нажатой клавиши, и среагировать соответствующим образом.
Такие дела, накидывайте 🔥, если вам заходит такой формат)
Спасибо за участие и комменты в опросе :3 Как и обещал, закидываю пост)
Во время практики ребятам нужно было сделать управление размером/поворотом объекта при помощи нажатия клавиш. Вроде все изи, но есть нюанс: ввод, который мы используем в плеймоде, отличается от ввода в редакторе.
Ситуация такая, класс Input для редактора недоступен, но есть класс Event с информацией о пользовательском вводе или рендеринге окна. Для каждого вызова OnGUI в скриптах создается новый Event, т.е. каждый метод отрисовки в редакторе может создать новый Event и значит их может быть несколько.
Остается вопрос: как мне определить нужное событие и вычленить из него нажатие клавиши?
Я смотрю на статическое свойство current, содержащее в себе Event. Он обрабатывается прямо сейчас в том скрипте, где я обращаюсь к этому свойству. И при помощи поля type я определяю, что за событие сейчас происходит, и провожу сравнение с желаемым событием из EventType.
После проверки события дело остаётся за малым, я уже знаю, что тип события - это нажатие на клавишу, а значит, могу обратиться к полю keyCode, которое хранит код нажатой клавиши, и среагировать соответствующим образом.
Такие дела, накидывайте 🔥, если вам заходит такой формат)
🔥31⚡2👍2❤1🍓1
С превью префаба можно работать!
На практике вебинара мы дали ребятам задание отобразить все префабы в каталоге. Если для каждого элемента делать отдельную иконку, - это ад, а расширение каталога занимает больше времени специалиста.
На самом деле для этой задачи у меня есть элегантное решение. Вы заметили, что Unity для префабов генерирует специальную иконку предпросмотра, которой мы будем пользоваться.
В Unity есть фишка - AssetPreview. Очень удобный класс, с которым мы получим превьюшку объекта, если у нас есть ссылка на него.
На практике мы пробегались по всему каталогу и получали превьюшку типа Texture2D для каждого элемента. Дальше - во время создания грида в качестве контента мы передаем иконки, а не сами объекты. Так можно делать, ибо индекс иконки соответствует индексу объекта в каталоге.
Ну и, напоследок, хотелось бы поздравить всех с наступающим Новым годом) Желаю вам всем в новом году крутых райзов, интересных задач и бенчёвых проектов! 🎄
На практике вебинара мы дали ребятам задание отобразить все префабы в каталоге. Если для каждого элемента делать отдельную иконку, - это ад, а расширение каталога занимает больше времени специалиста.
На самом деле для этой задачи у меня есть элегантное решение. Вы заметили, что Unity для префабов генерирует специальную иконку предпросмотра, которой мы будем пользоваться.
В Unity есть фишка - AssetPreview. Очень удобный класс, с которым мы получим превьюшку объекта, если у нас есть ссылка на него.
На практике мы пробегались по всему каталогу и получали превьюшку типа Texture2D для каждого элемента. Дальше - во время создания грида в качестве контента мы передаем иконки, а не сами объекты. Так можно делать, ибо индекс иконки соответствует индексу объекта в каталоге.
Ну и, напоследок, хотелось бы поздравить всех с наступающим Новым годом) Желаю вам всем в новом году крутых райзов, интересных задач и бенчёвых проектов! 🎄
🎄22👍8🔥3⚡1