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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
Update vs FixedUpdate — где двигать объект? + Time.deltaTime

Продолжаем разбор Update.

Вопрос с подвохом: где вызывать такой код — в Update или FixedUpdate?

private void Update()
{
transform.position += Vector3.forward * 10f;
}


Опытные разработчики уже чувствуют проблему

Если оставить код как есть и вызывать его в Update, скорость движения напрямую зависит от FPS:

• 30 FPS → объект едет медленно
• 120 FPS → объект летит быстрее

И FixedUpdate тоже не решение

Кажется логичным перенести код в FixedUpdate, но тут другая проблема: FixedUpdate вызывается реже, чем кадры
• между вызовами нет отрисовки
• визуально движение становится дёрганным

Решение — использовать Time.deltaTime

Нам нужно учитывать время между кадрами. Time.deltaTime — это количество секунд, прошедших с предыдущего кадра до текущего.

• Кадр 1 выполнился → прошло 0.008 секунд → Кадр 2 начался → Time.deltaTime = 0.008

Исправляем код:

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


Теперь:
• скорость одинакова при любом FPS
• движение плавное

🤔 Тогда зачем вообще FixedUpdate?

Логичный вопрос:
если есть Time.deltaTime, зачем нужен FixedUpdate?

Коротко:

• Update — визуал и логика
• FixedUpdate — физика

Почему так:

Update вызывается между физическими тиками, он не синхронизирован с физическим движком
FixedUpdate вызывается строго перед физическим шагом

Последовательность такая:

1. FixedUpdate у всех объектов
2. Unity считает физику
• коллизии
• силы
• OnCollisionEnter, OnTriggerEnter и т.д.

Если считать физику в Update (даже с Time.deltaTime), начинаются проблемы:

• туннелирование (объект «пролетает» сквозь коллайдеры)
• нестабильное и непредсказуемое поведение

Итог

Плавное движение, позиция, визуал → Update + Time.deltaTime
Физика, Rigidbody, силы, коллизии → FixedUpdate

🚀 Пост Guru Unity: @Minerope
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
#Собес #csharp #unity #asset_loading
🤔 Есть неактивный GameObject со ссылками на ассеты, располагающихся в Addressables. Что произойдёт с ассетами при старте сцены?

💬 Кратко:

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

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

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #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 и создать собственные игры шаг за шагом

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

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