Яковлев Илья | Gamedev – Telegram
Яковлев Илья | Gamedev
4.97K subscribers
277 photos
36 videos
19 files
242 links
Download Telegram
Спорим вы не знали об игре, которая перевернула разработку игр?)

Мне всегда нравилось узнавать об играх сделанных на Unity, поэтому решил выделить это дело в отдельную рубрику на канале, поставьте 🔥 в поддержку:)

Сегодня мы не будем говорить о полезных фишках для Unity. Вместо этого обсудим одну игру - чёрного лебедя, о которой вы, скорее всего, ничего не знаете... а ведь если бы не она, то сегодня вся игровая индустрия выглядела бы совсем иначе - и далеко не факт, что в лучшую сторону.

🧐 Инфы получилось довольно много, так что оформление будет в виде карточек:)

Ну а подобные постики будем помечать тэгом #MadeWithUnity
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1319🐳4👍2🌚2
Яковлев Илья | Gamedev pinned «Навигация по каналу: 🖥 Основные ресурсы: - Бот (тут можно забрать подробный roadmap с 0 до junior) - Ютуб канал - Обучение Unity adventure 👨‍💻 Рубрики: #лайфхаки - небольшие особенности Unity и C#, которые могут помочь в разработке #студия - рассказы/новости/кейсы…»
Решил немного обновить навигацию по каналу (сообщение в закрепе) :)

Как оказывается действительно многие пользуются подобным функционалом, поэтому в будущем буду более строго относиться к разбиению постов на хэштэги/рубрики, да и наверное по старым постам в скором времени пройдусь, тоже проставлю, если сил хватит:)

🙃 А вообще как у вас дела? Как двигаются проекты/обучение?)
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍7🐳4
В прошлом посте про #лайфхаки в C# мы разобрали, как можно удобно работать с диапазонами и комплексными условиями в switch-case конструкции. Вы поставили много 🔥, и это не осталось незамеченным! Так что сегодня продолжаем разбираться с интересными свойствами свича! 😎

Итак, у нас есть Юнити-приложение с внутриигровыми покупками. Мы выпускаем наш проект сразу на трёх платформах: в Play Market, в AppStore и в Стиме для Windows и macOS. У каждой из площадок - своя система обработки покупок, поэтому мы создали общий интерфейс IPurchaseService, к которому обращаемся в коде, и написали три отдельные реализации под каждый из магазинов приложений. Теперь нам остаётся только проинициализировать правильный сервис при запуске игры.

Ну и, в целом, switch-конструкция выглядит тут неплохим решением:
RuntimePlatform currentPlatform = Application.platform;
IPurchaseService purchaseService;

switch (currentPlatform)
{
case RuntimePlatform.WindowsPlayer:
case RuntimePlatform.OSXPlayer:
purchaseService = new SteamPurchaseService();
break;

case RuntimePlatform.IPhonePlayer:
purchaseService = new AppStorePurchaseService();
break;

case RuntimePlatform.Android:
purchaseService = new PlayMarketPurchaseService();
break;

default:
throw new Exception($"Unsupported platform: {currentPlatform}")
}


...и, вроде, всё работает, но создаётся явное ощущение, что для такого простого действия получилось многовато словесного шума.

Нет ли варианта лаконичнее?

✔️ Конечно же есть! С выходом C# 8 в языке была представлена новая фича - switch expressions. Она даёт знакомой нам конструкции непривычный краткий синтаксис следующего формата:
%имя_значения% switch
{
%кейс1% => %возвращаемое_значение%,
%кейс2% => %возвращаемое_значение%,
// <...>
_ => %дефолтное_возвращаемое_значение%
};


То, что свич-выражение вернёт как результат своей работы, можно будет сохранить в переменную или передать куда-то ещё. Самое то для нашего случая!

После рефакторинга получается такое:
// Статический импорт значений enum для краткости.
// Трюк выполнен профессионалами. Не повторяйте в жизни!
using static UnityEngine.RuntimePlatform;

// <...>

RuntimePlatform currentPlatform = Application.platform;

IPurchaseService purchaseService = currentPlatform switch
{
WindowsPlayer => new SteamPurchaseService(),
OSXPlayer => new SteamPurchaseService(),
IPhonePlayer => new AppStorePurchaseService(),
Android => new PlayMarketPurchaseService(),
_ => throw new Exception($"Unsupported platform: {currentPlatform}")
};


...и, вроде, уже все выглядит на порядок лучше, но как-то нехорошо смотрятся WindowsPlayer и OSXPlayer, которые пришлось прописать как два разных кейса, хоть они возвращают одно и то же. Но и это можно исправить при помощи контекстного ключевого слова or, о котором мы уже говорили в прошлый раз!

WindowsPlayer or OSXPlayer => new SteamPurchaseService(),


Диапазоны и другие ключевые слова, вроде and, when и отрицания not, тоже поддерживаются, так что в гибкости работы switch expressions ничем не уступают обычным свичам:
int healthPerCents = GetHealthPerCents();

CharAnimation animation = healthPerCents switch
{
100 => CharAnimation.Normal,
>= 25 and not > 100 => CharAnimation.Hurt,
> 0 and not > 100 => CharAnimation.CriticalState,
0 when _timeForReviveSeconds > 0 => CharAnimation.Dying,
0 => CharAnimation.Dead,
_ => throw new Exception($"{healthPerCents}")
};


Такая вот сегодня вышла switch-фишечка. Но и это ещё не всё, что умеет данная конструкция! В запасах лежит ещё одна маленькая интересность, которая иногда очень пригождается в проектах. Интересно о ней узнать? Ставь 🔥, и все будет в заключительном посте на эту тему!))
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1155🐳4👾2❤‍🔥1
Всем привет, снова с постом - вакансией от знакомых:)

————
Ищем backend разработчика на игровой проект на фулл тайм. Уровень разработчика от Middle+ до Senior.

Основное:

- Владение бэкендом: от проектирования и разработки до развертывания и поддержки
- Владение Docker, Docker Compose, умение поднять с 0 сервер
- Бэкенд на .net
- Фрондент на Unity
- Понимание DevOps
- Опыт написания realtime мультиплеерных механик

Работа удаленная, постоянное трудоустройство

Проект на ПК и Мобильные платформы.
За ориентир по сложности проектов можно брать Delta Force.
————

За подробностями писать сюда -> @K0nDeR

p.s. указывайте, пожалуйста, проекты и релевантный опыт в резюме
12🐳3
И снова всем #ПриветИзПрошлого!)

А вот вам ещё кусочек необычного кода, который реально работал в Юньке!

➡️ В прошлом посте про старый Юнити мы обсуждали, что раньше можно было писать скрипты аж на трёх языках. И если один из них - Boo, - оказался почти никому не нужен и вскоре забыт, то второй, - UnityScript, - зашёл немалому числу людей, и долгое время был настоящим конкурентом C#.

⚙️ И это не удивительно. Boo интегрировали в Юнити чисто "чтобы был". Создателя языка просто наняли в штат компании, и он как-то там поддерживал своё детище на фоне. А вот UnityScript разрабатывали самостоятельно, эксклюзивно для движка, поэтому этот язык умел некоторые штуки, о которых даже современный C# может только мечтать.

💡 Например, в скриптах было необязательно писать класс - просто лепи код, как есть, а движок сам поймёт, что нужно отнаследоваться от монобеха. А ещё все сущности, написанные на этом языке, сразу умели отображаться в Инспекторе, потому что аттрибут [System.Serializable] применялся к ним автоматически.

ℹ️ Само название UnityScript намекает, что его основные идеи нагло спёрли подсмотрели у JavaScript. Даже файлам с кодом оставили расширение .js, из-за чего некоторые начинающие разработчики игр потом искренне верили, что именно так и выглядит ДжаваСкрипт - с классами и статической типизацией 😂

📉 К сожалению, хоть этот язык и шёл гораздо лучше Boo, в итоге они разделили одну судьбу. Со временем разработчики всё больше склонялись в сторону C#, считая, что альтернативы - ерунда и детский лепет. В итоге Unity Technologies объявили, что и Boo, и UnityScript будут полностью удалены из движка.

📊 И пусть на тот момент меньше 3% всех проектов использовали UnityScript как основной язык, всё равно в каждой пятой игре, сделанной на Unity, был хотя бы один .js-файл. Поэтому, в отличие от Boo, нашего героя не забыли полностью. Более того, именно из-за него по сей день некоторые новички верят, что в Unity можно писать код на ДжаваСкрипте... или вообще на Java))

А ещё ходят слухи, что где-то в тёмных подвалах разработчики до сих пор поддерживают старые игры, написанные на UnityScript...

А вы встречали UnityScript в проектах? 🧐 Пишите в комментариях и ставьте 🔥 , если хотите узнать больше о старой Юньке!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3114🐳7
⭐️ Screenshot Saturday! ⭐️

Делимся своими наработками/проектами/идеями в комментариях!🔥🔥🔥
10🔥5🐳4
Недавно мы с вами уже рассматривали интересности из старых версий движка. Но и в настоящем есть, что посмотреть, так что сегодня тестируем рубрику, в которой будем рассказывать, #ЧтоНового крутого появилось в новых релизах Юньки!)) Поддержите 🔥, если хотите ещё таких выпусков!

Запекать красивый свет никогда не было так просто, как в Unity 6!

💡 Свет - невероятно мощный инструмент, который может в корне преобразить визуал игры и бесконечно радовать глаз игрока. А запекание освещения заблаговременно, на этапе разработки, позволяет всей этой красоте ещё и не нагружать устройство пользователя расчётами в реальном времени.

Если какие-то объекты на сцене статичны, значит, падающий на них свет и отбрасываемая ими тень не будут меняться в процессе игры, так что, вместо того, чтобы просчитывать их каждый кадр в рилтайме, можно сделать это единожды заранее и записать все затемнения и засветы прямо в текстуры сущностей.

Но что делать с динамичными объектами? Ведь вшивать в связанные с ними материалы данные освещения явно не стоит, а то игрок очень удивится, когда сломает ящик, а тень от него останется на стене 😄

⚡️ Для решения этой задачи в Unity давно существуют так называемые Light Probes. Они работают по прямо противоположному принципу: запоминают степень освещённости не на поверхностях, а на пустых пространствах вокруг себя. Впоследствии, если в зоне их действия появляется какой-то объект, движок не тратит время на раздумья "как сильно нужно освещать эту сущность," а просто вытаскивает из лайт пробы заранее просчитанные значения для этого куска сцены и применяет их во всех нужных местах. Удобно! Но не совсем. Объективным недостатком технологии Light Probes является необходимость вручную расставлять их в нужных местах. Этот процесс довольно кропотливый, да ещё и приходится повторять его каждый раз, когда архитектура сцены изменяется.

💥 В Unity 6 и эту проблему постарались решить! На одной из презентаций была представлена новая технология - Adaptive Probe Volumes (APV). Идея проста: нажмите одну кнопку, и движок расставит Light Probe-группы за вас, основываясь на источниках освещения сцены и её архитектуре! Более того, в целях оптимизации APV по-разному распределяет пробы на каждом конкретном участке локации. Чем сложнее архитектура сегмента, тем кучнее группы Light Probe'ов будут расположены. И наоборот - там, где толком ничего нет, много лампочек пихать не будут. Незачем.

✏️ Чтобы использовать Adaptive Probe Volumes в URP- или HDRP-проекте на Unity 6 или выше, открываем ассет нашего пайплайна и в поле Lighting > Light Probe System переключаем "Light Probe Groups" на "Adaptive Probe Volumes". Далее в окне глобальных настроек освещения (Открывается на Ctrl+9) на вкладке Scene выключаем флаг Realtime Global Illumination, если он включён, и нажимаем Generate Lighting в нижней панели. После этого группы Light Probes должны сгенерироваться для всех Baked- или Mixed-источников освещения. А посмотреть, как эти группы расставило по сцене, можно, включив флаг Probe Visualization > Display Probes в дебаггере рендеринга (В верхней панели выбираем Window > Analysis > Rendering Debugger, вкладка Probe Volumes).

ℹ️ Стоит отметить, что технология ещё молодая и требовательная к настройке проекта, поэтому на некоторых сценах может сбоить и ставить отдельные лайт пробы невпопад, а сами лампочки иногда просвечивают между стенами, если последние слишком тонкие. Но, уверены, в будущем это поправят, как уже довели до ума многие другие инструменты, без которых мы сейчас просто не можем представить работу в Unity. Да и уже сегодня эта технология выглядит очень многообещающе! 😎

Такая вот сегодня интересность о новом движке:) Делитесь в комментариях своим опытом использования APV и не забывайте про 🔥, если интересно узнать, #ЧтоНового ещё принёс нам Юнити шестого поколения!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8410🐳3
🔥 Бесплатные ассеты 🔥

Подписчик поделился проходящими сейчас акциями (спасибо ему!), а я делюсь с вами!)

🔣 Набор прикольных мультяшных ассетов для прототипирования от KayKit можно забрать тут

🔣 Деревья, природные ассеты можно забрать тут по промокоду: BLACKHORIZON2025

Пользуйтесь на здоровье:) Будем стараться отлавливаться подобные приятности и дальше🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥398🐳2👍1
InspectorMagicWithLogo.gif
24 MB
Инспектор может больше, чем ты думаешь!

Полгода назад в одном из постов про #лайфхаки я уже рассказывал, что Юнька позволяет вставлять в float-поля не только стандартные значения, но и бесконечность. Однако тогда из финального текста пропал кусок с объяснением, как именно это можно сделать:)

Так что расскажу про такие возможности по подробнее)

Если вам временно нужно сделать бесконечным количество патронов или секунд в таймере, настраиваемом float-значением через Инспектор, не спешите лезть в код и переписывать логику. Просто напишите в нужном поле inf или Infinity, и Юнити автоматически подставит туда соответствующее значение.

Также можно получить отрицательную бесконечность, написав -inf или -Infinity соответственно, если вам вдруг это зачем-то надо.

А ещё таким образом можно вставить в float-поле число Пи (pi) и Not a Number (NaN). Конкретно это на практике не особо полезно, но прикольно же! 😎

Ну и фактик напоследок - Инспектор ещё и считать умеет! Если по заветам Сида Мейера захотите увеличить или уменьшить какое-то значение в два раза, не тянитесь за калькулятором. Просто введите в Инспектор математические выражения, и он всё посчитает за вас. Помимо базовых операций поддерживаются возведение числа в степень при помощи символа ^ и взятие квадратного корня через sqrt()

На сегодня у меня всё. Как всегда, если пост понравился, обязательно ставьте 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8412👍10🥱2🐳2
🔥 Еще пачка ассетов 🔥

Подписчики продолжают делиться проходящими сейчас акциями (спасибо!), а я делюсь с вами!)

🔣 Интересная моделька рыцаря в реализме: [ЗАБРАТЬ ТУТ]

🔣 Симпотный природный ассет: [ЗАБРАТЬ ТУТ]

🔣 Крутая моделька зомби: [ЗАБРАТЬ ТУТ] по промокоду STUDIONEWPUNCH

Пользуйтесь на здоровье:) Будем стараться отлавливаться подобные приятности и дальше🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥254🐳2❤‍🔥1👍1
Новый Unity рвётся в Web! 🔥

Много всего у юнити происходит последнее время:) Поэтому давайте постепенно разгребать это дело в рубрике #ЧтоНового

🌐 На первой презентации Unity 6 в сентябре 2024-го Юнитеки объявили, что планируют сделать Web-игры great again, и даже показали Project Prismatic - демку полноценного 3D-шутера, работающего прямо в браузере. А сразу после этого ещё и объявили совместный геймджем с Crazy Games, предлагая всем желающим разработать игру на веб-рантайме новой Юньки.

Но что такого добавили в Unity 6, что все сразу так оживились? 🤔

🥇 Новый WASM - новые возможности. Веб-приложения на Unity 6 поддерживают Web Assembly нового поколения, что позволяет эффективнее использовать процессор и удваивает максимальный размер кучи вашей игры. Бесил лимит памяти для браузерных игр в 2 гига? Начиная с Unity 6, можно поставить до 4 GB!)) 🔼

🥈 WebGPU - используй видеокарту на 120%! Уже давно стандартом браузерной индустрии считается WebGL 2.0. Вот только вышел он больше десяти лет назад, так что не поддерживает кучу возможностей современных видеочипов - например, вычислительные шейдеры. Поэтому, начиная с Unity 6.1, юнитеки разрешили всем желающим использовать свежий крутой стандарт WebGPU, который убирает эти ограничения и открывает новые горизонты для оптимизации и сложного рендеринга в браузере. 😎

🥉 Мобилки + Веб = Unity 6. Последнее по порядку (но не значению) нововведение - официальная поддержка мобильных браузеров! Теперь в веб-игры, сделанные на Юнити, можно будет комфортно рубиться не только дома на компе, но и где угодно, прямо с телефона. Раньше тоже можно было, но теперь поддержка этого дела официальная, а значит будет меньше непредвиденных ситуаций:)

Все эти фишки ещё находятся в активной разработке, но уже сегодня выглядят перспективно. На проде использовать не советуем пока, но потыкать очень рекомендуем. Смотря на них, начинаешь верить, что в будущем нас правда может ждать возрождение Web-игр... А вы что думаете? 🧐

❗️ Ставьте 🔥, если хотите видеть больше постов про Unity 6. А если кому-то захотелось потрогать демку Project Prismatic, то затестить её можно на официальном сайте:)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥132👎43🐳2💅1
Недавно Юнитеки провели ежегодную конференцию Unite, где показали, что ждёт нас в недавно релизнувшихся и более отдалённых версиях движка. Специально для тех, кому некогда или лень смотреть, #ЧтоНового добавят? Вот список самых интересных анонсов! 💥


🔄 Обновлённый Unity Editor - быстрее, гибче, сильнее!

Юнитеки наконец-то поняли, что с интерфейсом и производительностью редактора надо что-то делать. Поэтому в новых версиях Unity нам обещают:

✔️ Переработанное окно Иерархии, которое сделали шустрее и гибче текущего
✔️ Прокачанный поисковик объектов
✔️ Улучшенную производительность при работе с ассетами и не только


⚙️ New Input System - ещё более новая, чем была

Начиная с Unity 6000.3, пакет Input System (бывший New Input System) будет предустановленным и рекомендованным для использования в дальнейшем. Из обещанных улучшений:

✔️ Уменьшенная задержка ввода
✔️ End User Rebinding - Идущее "из коробки" решение, позволяющее игрокам перебинживать кнопки управления под себя


✏️ Из приятных мелочей:

⭐️ DirectX 12 для Windows оптимизировали, чтобы он быстрее работал и ел меньше памяти

⭐️ Фича Multiplayer Building Blocks позволит быстрее создавать многопользовательские проекты

⭐️ Добавят низкоуровневый API, чтобы удобно писать собственную 2D-физику


Ну и, пожалуй, самое главное:

🔥 Unity 6 мигрирует на CoreCLR! 🔥

Постепенно движок будет переходить с бэкенда Mono на .NET, что должно значительно ускорить всю работу Unity (прощай, рекомпиляция в две минуты после каждого изменения кода!) и наконец-то дать нам доступ к фичам C# 10 и выше, таким как file scoped-неймспейсы, например:) Непонятно, естественно сколько времени это займет и что в итоге получится, но новость крутая

____
Вот тако
й получился списочек будущих фич. Всё это ещё не окончательно, но пока что создаётся ощущение, что компания наконец-то нащупала понятное направление развития.

А вы что думаете? Смотрели Unite 2025? Как вам анонсы?
🧐 Ставьте 🔥 и пишите в комментариях:)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥634🐳4❤‍🔥3👏3