Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+666новых вакансий за сутки·52 265вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 686
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 394 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python5 973
  • Облачные технологии4 523
  • QA вакансии1 689
  • Android1 143
  • Инженер данных788
  • Продакт-менеджер308

Разработка

  • iOS1 093
  • Backend вакансии1 020
  • Fullstack вакансии448
  • AI вакансии378
  • Frontend вакансии369
  • Mobile вакансии27

По стеку

  • Go3 345
  • Java2 037
  • Kotlin908
  • Node.js746
  • Rust492
  • .NET481
  • PHP278
  • C++213
  • C#199

DevOps и инфраструктура

  • Kubernetes2 562
  • Linux-инфраструктура2 030
  • DevOps вакансии1 855
  • Terraform / IaC1 548
  • CI/CD876
  • Мониторинг и Observability709
  • SRE229
  • Кибербезопасность40

Аналитика и данные

  • Аналитик данных479
  • Data Scientist443
  • Бизнес-аналитик342
  • Системный аналитик50

Другие направления

  • Проджект-менеджер107
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США24 039
  • Вакансии в Европе9 373
  • Работа в России2 968
  • Вакансии в Канаде2 114

По формату

  • Удалённые вакансии41 595
  • Релокация в США24 039
  • Гибридная работа5 209
  • Офисная работа3 834

По уровню

  • Senior вакансии22 591
  • Middle вакансии12 174
  • Junior вакансии4 013

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise81 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий
  • Adyen9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Unreal EngineВсе вопросы
Unreal EngineMiddleТеория

Что такое Subsystems в Unreal Engine и как они улучшают организацию кода?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Subsystems — автоматически управляемые синглтоны UE с жизненным циклом, привязанным к владельцу (Engine, GameInstance, World, LocalPlayer). Они заменяют ручные менеджеры: движок создаёт и уничтожает их сам, доступ — через GetSubsystem<T>().

Создание Subsystem

// Header: MyInventorySubsystem.h
#pragma once
#include "Subsystems/GameInstanceSubsystem.h"
#include "MyInventorySubsystem.generated.h"

UCLASS()
class MYGAME_API UMyInventorySubsystem
    : public UGameInstanceSubsystem
{
    GENERATED_BODY()
public:
    virtual void Initialize(FSubsystemCollection& Collection) override;
    virtual void Deinitialize() override;

    UFUNCTION(BlueprintCallable)
    void AddItem(FName ItemId, int32 Count);

    UFUNCTION(BlueprintCallable, BlueprintPure)
    int32 GetItemCount(FName ItemId) const;

private:
    TMap<FName, int32> Inventory;
};
// CPP: MyInventorySubsystem.cpp
void UMyInventorySubsystem::Initialize(FSubsystemCollection& Collection)
{
    Super::Initialize(Collection);
    UE_LOG(LogTemp, Log, TEXT("InventorySubsystem initialized"));
}

void UMyInventorySubsystem::Deinitialize()
{
    Inventory.Empty();
    Super::Deinitialize();
}

void UMyInventorySubsystem::AddItem(FName ItemId, int32 Count)
{
    Inventory.FindOrAdd(ItemId) += Count;
}

int32 UMyInventorySubsystem::GetItemCount(FName ItemId) const
{
    const int32* Found = Inventory.Find(ItemId);
    return Found ? *Found : 0;
}

Subsystems в Unreal Engine

Subsystems — это управляемые синглтоны, автоматически создаваемые и уничтожаемые движком в соответствии с жизненным циклом их владельца. Они устраняют необходимость вручную создавать глобальные менеджеры, регистрировать их в GameInstance или передавать через весь стек вызовов.

Типы Subsystems и их владельцы

  • UEngineSubsystem — живёт весь сеанс движка. Подходит для глобальных сервисов (аналитика, логирование).
  • UGameInstanceSubsystem — живёт от создания GameInstance до выхода. Подходит для сессионных данных (инвентарь, профиль игрока).
  • UWorldSubsystem — живёт вместе с World. Пересоздаётся при смене уровня. Подходит для систем уровня (спаун, economy).
  • ULocalPlayerSubsystem — по одному на LocalPlayer. Подходит для split-screen, UI per-player.
  • UEditorSubsystem — только в редакторе. Подходит для редакторских тулов.

Получение Subsystem

// Из любого UObject с доступом к World:
UMyInventorySubsystem* Inv = GetGameInstance()
    ->GetSubsystem<UMyInventorySubsystem>();
Inv->AddItem(FName("Sword"), 1);

// Или через статический хелпер:
UMyInventorySubsystem* Inv =
    UGameInstance::GetSubsystem<UMyInventorySubsystem>(
        GetGameInstance());

// WorldSubsystem:
UMyWorldSubsystem* WS = GetWorld()
    ->GetSubsystem<UMyWorldSubsystem>();

Зависимости между Subsystems

Если один Subsystem зависит от другого, укажите зависимость в Initialize:

void UMyAdvancedSubsystem::Initialize(FSubsystemCollection& Collection)
{
    Collection.InitializeDependency<UMyInventorySubsystem>();
    Super::Initialize(Collection);
    // Теперь UMyInventorySubsystem гарантированно инициализирован
}

Почему Subsystems лучше классических паттернов

  • Не требуют ручной регистрации в GameMode/GameInstance — движок создаёт их автоматически.
  • Жизненный цикл чётко привязан к владельцу — нет проблем с dangling pointers.
  • Легко находятся через typed GetSubsystem — нет глобальных переменных или CastChecked цепочек.
  • Blueprints вызывают их нативно без дополнительной обёртки.

Подводные камни

  • WorldSubsystem сбрасывается при смене уровня — не храните в нём данные, которые должны пережить level transition. Используйте GameInstanceSubsystem.
  • Порядок инициализации не гарантирован без явного InitializeDependency. Не обращайтесь к другим Subsystems в конструкторе — только в Initialize.
  • Subsystem != синглтон по паттерну — LocalPlayerSubsystem создаётся по одному на каждого LocalPlayer; GetSubsystem<> возвращает экземпляр для конкретного Player.
  • Тестируемость — для unit-тестов Subsystem нужен полноценный GameInstance/World. Вынесите бизнес-логику в обычные классы, а Subsystem используйте как тонкий фасад.
  • Нельзя создать вручную через NewObject — Subsystems создаются только движком. Попытка создать через NewObject приведёт к ошибке.

Частые вопросы на собеседовании

  • В каких проектах Unreal Engine оправдан, а где он становится источником лишней сложности?
  • Что такое макросы UPROPERTY и UFUNCTION и какие параметры они поддерживают?
  • Что такое сборщик мусора (garbage collector) в Unreal Engine и как предотвратить уничтожение объектов?
  • В чём разница между GameMode, GameState, PlayerController и PlayerState?

Типичные ошибки

  • Объяснять Subsystems только по синтаксису, без жизненного цикла и стоимости.
  • Игнорировать ошибки, null/empty состояния, порядок инициализации или режим сборки.
  • Давать пример, который работает в демо, но ломается при изменении владельца ресурса.
  • Использовать макросы или specifier-и наугад и забывать про UObject GC.

Что проверяет интервьюер

  • Кандидат формулирует точную модель для Subsystems, а не только определение.
  • Пример компилируем, безопасен по lifetime и соответствует версии технологии.
  • Названы trade-off, ограничения и диагностируемые симптомы ошибки.
  • Понимает границу между C++ кодом, runtime/framework metadata и editor/UI слоем.

Как вы знаете этот вопрос?

Проверить себя по теме Unreal Engine →

Источники

  • https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-subsystems-in-unreal-engine

Связанные темы

Unreal Engineasset-pipelinegameplay-architectureperformance-debugging