Яковлев Илья | Gamedev
4.96K subscribers
270 photos
36 videos
18 files
237 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
🔥1309🐳4👍2🌚2
Яковлев Илья | Gamedev pinned «Навигация по каналу: 🖥 Основные ресурсы: - Бот (тут можно забрать подробный roadmap с 0 до junior) - Ютуб канал - Обучение Unity adventure 👨‍💻 Рубрики: #лайфхаки - небольшие особенности Unity и C#, которые могут помочь в разработке #студия - рассказы/новости/кейсы…»
Решил немного обновить навигацию по каналу (сообщение в закрепе) :)

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

🙃 А вообще как у вас дела? Как двигаются проекты/обучение?)
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍7🐳3
В прошлом посте про #лайфхаки в 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
🔥1134🐳4👾2
Всем привет, снова с постом - вакансией от знакомых:)

————
Ищем 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
🔥2312🐳7