Game Development | YeaHub
376 subscribers
151 photos
192 videos
529 links
Теория, подготовка к интервью и курсы для Game Dev разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #github
🤔 Что такое Git и GitHub?

💬 Кратко:

Git — это система контроля версий, которая позволяет отслеживать изменения в коде, возвращаться к старым версиям и работать над проектом совместно с другими разработчиками. GitHub — это платформа, где можно хранить код в облаке, делиться им и управлять проектами с помощью Git. Вместе они помогают эффективно работать над проектом в команде.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#video #csharp
📚 C# УРОКИ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ

Этот YouTube-плейлист представляет собой серию уроков по программированию на C# — от базовых понятий для новичков до более продвинутых тем, таких как работа с массивами, создание проектов в Visual Studio и практические примеры кода, что делает его удобным бесплатным курсом «от новичка к профессионалу» для тех, кто хочет освоить C# и начать разработку приложений.

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #ai #blueprints
🤔 Каковы преимущества использования встроенного физического движка Unreal Engine?

💬 Кратко:

Встроенный физический движок Unreal Engine обеспечивает реалистичные симуляции и взаимодействия, что улучшает атмосферу игры. Его интеграция с другими функциями Unreal Engine, такими как Blueprints и AI, позволяет оптимизировать производительность и ускорить процесс разработки.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#Собес #garbage_collection #performance #object_pooling
🤔 Как Unity обрабатывает сборку мусора и какие стратегии можно использовать для минимизации ее влияния на производительность?

💬 Кратко:

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

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #git_branch
🤔 Перечислите команды для удаления ветки git

💬 Кратко:

Для удаления локальной ветки:
git branch -d <branch_name>

Если ветка содержит незавершённые изменения:
git branch -D <branch_name>

Для удаления удалённой ветки:
git push origin --delete <branch_name>


📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#roadmap #unrealengine #cplus #roadmap
📚 Roadmap Unreal Engine / C++ developer

Эта статья представляет собой дорожную карту (roadmap) для разработчиков, желающих освоить Unreal Engine и C++. Она предлагает разные пути обучения в зависимости от исходного опыта читателя: для начинающих без опыта, для опытных программистов не из геймдева и для тех, кто уже работает в игровой индустрии. В материале подробно разбираются ключевые компоненты и сущности движка, такие как акторы (Actors), компоненты (Components), управляющие сущности (PlayerController, GameMode и др.), события (Delegates, Events), репликация для мультиплеера и многое другое, что составляет основу для собеседований и практической работы с Unreal Engine

Перейти к материалу

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#Собес #strategy #factory #decorator
🤔 Какие паттерны проектирования вы применяли в реальных проектах?

💬 Кратко:

В проектах часто применял Strategy для выбора алгоритма отправки уведомлений (Email, SMS, Push), Factory для создания репозиториев в зависимости от конфигурации, Decorator для динамического добавления логирования и проверок, Repository + Unit of Work для абстракции доступа к данным, а также Observer для событийной обработки (кэш-инвалидация при изменении сущностей).

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
Продолжаем разбирать разные Update.
Сегодня - коротко про Time.fixedDeltaTime.

Time.fixedDeltaTime - это значение фиксированного шага физики (Fixed Timestep). По умолчанию - 0.02, то есть FixedUpdate вызывается 50 раз в секунду.
Логично подумать, что в FixedUpdate нужно использовать именно Time.fixedDeltaTime.
Но это не обязательно.

Time.deltaTime достаточно умный. Документация говорит:
When this is called from inside MonoBehaviour.FixedUpdate, it returns Time.fixedDeltaTime.


То есть внутри FixedUpdate: Time.deltaTime и Time.fixedDeltaTime вернут одно и то же значение. Разница - только в читаемости кода.

Тогда зачем вообще Time.fixedDeltaTime?

1️⃣ Чтобы изменить частоту FixedUpdate

Time.fixedDeltaTime = 0.01f;


Было 0.02 → 50 вызовов в секунду.
Стало 0.01 → 100 вызовов в секунду.

Меняем шаг физики - меняется частота FixedUpdate.

2️⃣ Если нужно получить фиксированный шаг вне FixedUpdate

Например, в специфических расчетах, где важно знать именно физический timestep.
Во всех остальных случаях можно спокойно использовать Time.deltaTime.

Чаще всего Time.fixedDeltaTime вам пригодится:

• либо при тонкой настройке физики
• либо чтобы блеснуть знанием на собеседовании 🙂

В следующем посте разберём, что происходит с Update и FixedUpdate, когда игра подвисает.

🚀 Пост Guru Unity: @Minerope
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#Собес #csharp #dispose #garbage_collector
🤔 Что произойдёт, если не вызвать Dispose вручную? Можно ли сделать так, чтобы он вызывался автоматически?

💬 Кратко:

Если не вызвать Dispose, ресурсы (файлы, соединения) останутся занятыми до сборки мусора. Автоматический вызов возможен через using или финализатор (но финализатор ненадежен).

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#Собес #replication #high_availability #failover
🤔 Что такое PostgreSQL replication?

💬 Кратко:

Репликация в PostgreSQL — это процесс создания копий данных из основной базы данных на другие серверы. Это повышает отказоустойчивость, позволяет балансировать нагрузку и обеспечивает резервное копирование. Существует несколько типов репликации: синхронная и асинхронная.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#video #unity
📚 FREE Complete Unity Game Development Courses

Полный бесплатный курс по разработке игр на Unity — от базовых уроков для начинающих до продвинутых тем, охватывающий основы интерфейса, C#-скрипты, 2D/3D-разработку и практические проекты, чтобы помочь вам освоить Unity и создать собственные игры шаг за шагом

Перейти к материалу

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
Forwarded from YeaHub
👨🏻‍💻 Сервис лайвкодинга в YeaHub

Фактически — релиз уже состоялся.
Но честно: мы не успели загрузить ту огромную базу задач, которую планировали, и ещё не всё успели полноценно протестировать.

Поэтому до 23 февраля работаем в режиме «вместе доделываем продукт»:
— мы активно добавляем задачи и чиним баги, все
— пока тестируем, все задачи открыты, после этого примерно 50% закроем для членов
— вы решаете, находите проблемы, пишете в поддержку и даёте фидбек
— ну и оформляете подписку 😜

Что уже есть:
• база реальных задач с собеседований
• JavaScript / Python / Java / Go
• удобный редактор и проверка решений

Что скоро:
• связь задач с компаниями и коллекциями собеседований (не успели в этот релиз)
• другие языки
• контесты
• обучающие модули и курс по алгоритмам
• AI-разбор решений построчно
• челленджи и соревнования

👉 Задачи: https://yeahub.ru/dashboard/tasks

👉 Членство: https://yeahub.ru/dashboard/settings#select-tariff

Новогодние цены действуют только до полноценного запуска. После — x2.
Сейчас лучший момент подключиться и поддержать проект.


Спасибо, что помогаете нам запустить это правильно✊🏻🚀💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#Собес #collections #data_structures
🤔 Как подойти к выбору коллекции для задачи? Как учитывать алгоритмическую сложность при выборе?

💬 Кратко:

Выбор коллекции начинается с анализа операций: частые вставки, удаления, поиск или доступ по индексу. Учитывайте алгоритмическую сложность операций - O(1) для константного времени, O(n) для линейного. List подходит для частого доступа по индексу, Dictionary для быстрого поиска по ключу, HashSet для проверки принадлежности.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
Продолжаем углубление в методы Update - Рассмотрим поведение FixedUpdate при зависании

Давайте попробуем ответить на вопрос, который мне задавали на собесе:
Если игра зависла на 2 секунды, то какое будет поведение FixedUpdate в восстановившийся кадр?
Если мы знаем, что FixedUpdate работает зафиксированное время, то что делать, если время прошло, а операция не выполнилась?


Из того, что мы знаем о FixedUpdate, напрашивается очень неприятный вывод.
Если Fixed Timestep установлен в 0.02 секунды, это означает, что физика должна обновляться 50 раз в секунду. Прошло 2 секунды? Значит Unity должен вызвать FixedUpdate 100 раз, чтобы физика "догнала" реальное время.

Но это катастрофа! Если Unity в одном кадре начнёт вызывать FixedUpdate сто раз подряд, это займёт огромное количество времени и игра зависнет ещё сильнее. Следующий кадр тоже будет долгим, что потребует ещё больше вызовов FixedUpdate, и так далее. Это называется "спиралью смерти" производительности.

Но это не происходит, потому что я не сказал вам про ещё одну важную составляющую FixedUpdate. Это - Maximum Allowed Timestep, который располагается в настройках рядом с Fixed Timestamp и по умолчанию равняется 0.3333333.
Эта настройка ограничивает количество времени, которое Unity тратит на обработку физики и вызовов FixedUpdate в течение одного кадра в секундах.
Если обработка кадра занимает больше времени, чем Maximum Allowed Timestep, физический движок не пытается симулировать дополнительное время, превышающее Maximum Allowed Timestep, и вместо этого позволяет обработке кадра завершиться, после чего возобновляет работу так, как будто время не прошло.

Детальнее. У нас Fixed Timestep равен 0.02 секунды, Maximum Allowed Timestep равен 0.33 секунды. Игра зависла на 2 секунды.
Без ограничения Unity должен был бы вызвать FixedUpdate сто раз (две секунды разделить на 0.02 секунды). Но с ограничением в 0.33 секунды максимум он может вызвать примерно шестнадцать раз (0.33 разделить на 0.02).
Как это выражается в поведении физики на сцене? Предположим, мы симулируем полёт пули, скорость которой равняется 100 метров в секунду. За 2 секунды она должна была пролететь 200 метров, но из-за зависания, она пролетит только 33 метра.

0.33 сек : 0.02 сек = 16-17 вызовов, в зависимости от дробной части (Пока возьмём 16)
16 вызовов * 0.02 сек = примерно 0.33 сек
100 м * 2 сек = 200 м - сколько она должна пролететь
Но из - за ограничения выходит вот так:
100 м * 0.33 = 33 м


Выглядит неприятно, но к сожалению это пришлось сделать, чтобы не раскручивать спираль смерти.

Следующий пост будет финальным, в котором мы рассмотрим поведение Update и LateUpdate при зависании.

🚀 Пост Guru Unity: @Minerope
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #unity #csharp
🤔 Что делал, чтобы уменьшить мусор при инициализации Spine-анимаций?

💬 Кратко:

Чтобы уменьшить GC при инициализации Spine, использовал кэширование анимаций и скелетов, избегал частого создания/уничтожения Spine GameObject, применял object pooling для анимированных объектов, и минимизировал runtime изменения скинов и аттачментов.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#Собес #postgres #copy #insert
🤔 В каких случаях стоит использовать COPY вместо INSERT в Postgres?

💬 Кратко:

COPY стоит использовать при массовой загрузке данных. Он работает значительно быстрее INSERT, потому что минимизирует накладные расходы и сетевые round-trip.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#video #unity
📚 FREE Complete Unity Game Development Courses

Полный бесплатный курс по разработке игр на Unity — от базовых уроков для начинающих до продвинутых тем, охватывающий основы интерфейса, C#-скрипты, 2D/3D-разработку и практические проекты, чтобы помочь вам освоить Unity и создать собственные игры шаг за шагом

Перейти к материалу

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
#Собес #synchronization #context #async
🤔 Что делает synchronization context?

💬 Кратко:

Synchronization Context - это механизм, который управляет тем, в каком потоке выполняется код после асинхронной операции. Он обеспечивает, что код продолжает работать в правильном контексте, например, в основном потоке UI. В Windows Forms и WPF он гарантирует, что обновления интерфейса происходят только в UI-потоке. Без него асинхронные операции могли бы завершаться в случайных потоках, что привело бы к ошибкам при обновлении элементов управления.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
Анонсы → канал
Комьюнити → чат
База задач и вопросов → платформа
Как работают Update и LateUpdate

Завершаем цикл постов про методы Update. Сегодня разберём, как ведут себя Update и LateUpdate, если игра подвисает.

Эти методы работают очень просто: кадр вызвался → методы вызвались.

Они не пытаются “догнать” пропущенные вызовы, как это делает FixedUpdate.
То есть один кадр = один вызов метода.

Теоретически при длительном зависмании нас может спасти Time.deltaTime, потому что он учитывает время между кадрами. Но тут есть важный нюанс.

У Time.deltaTime есть ограничение - Time.maximumDeltaTime (в инспекторе это Maximum Allowed Timestep).

Это означает, что значение Time.deltaTime никогда не будет больше ~0.333 секунды.

Подробнее можно почитать в документации:
https://docs.unity3d.com/ru/530/Manual/TimeFrameManagement.html
https://docs.unity3d.com/6000.3/Documentation/Manual/time-handling-variations.html

Как это выглядит на практике

Вспомним простой код движения:

private void Update()
{
transform.position += Vector3.forward * 10f * Time.deltaTime; // 10 м/с
}


Если игра подвиснет на 2 секунды, то Time.deltaTime всё равно будет равен 0.33.

В итоге - ожидали пройти 20 метров, а фактически пройдём 3.3 метра. Потому что deltaTime ограничен.

Можно ли это исправить?

Технически - да.

Можно использовать:

• Time.unscaledDeltaTime - deltaTime без ограничений
• Time.realtimeSinceStartup - реальное время с момента запуска приложения

Но это почти всегда плохая идея для игровой логики.

Если игра подвиснет, объект может “телепортироваться” на большое расстояние.

Кроме этого:
• физика не будет успевать за объектом
• логика станет сложнее
• нагрузка на CPU может увеличиться

По сути, можно раскрутить “спираль смерти”-— когда из-за лагов система начинает лагать ещё сильнее.

Когда это всё-таки имеет смысл


Использовать unscaledDeltaTime имеет смысл там, где важно реальное время, а не игровое.

Например, для таймера UI:

private void Update()
{
_uiTimer += Time.unscaledDeltaTime;
UpdateUITimerText(_uiTimer);
}


А что насчёт LateUpdate?

LateUpdate работает по тем же принципам, что и Update.
Единственная разница - порядок вызова. Сначала Update, потом LateUpdate.

То есть всё, что мы разобрали про Update (ограничение deltaTime, поведение при фризах и т.д.), полностью применимо и к LateUpdate.
Если понимать эти механизмы под капотом, можно без труда отвечать на каверзные вопросы на собеседованиях и, что важнее, писать более предсказуемую игровую логику.

🚀 Пост Guru Unity: @Minerope
Please open Telegram to view this post
VIEW IN TELEGRAM