Core Architecture

Core Architecture

Authoritative gameplay layers in UE5

Keep game rules deterministic by splitting responsibilities across `GameMode`, `GameState`, `PlayerState`, replicated actors, and subsystem services.

Ключевая архитектура

Authoritative gameplay-слои в UE5

Поддерживайте детерминированные правила игры, разделяя ответственность между `GameMode`, `GameState`, `PlayerState`, реплицируемыми акторами и subsystem-сервисами.

Video Walkthrough

Видеообзор

Shared UE5 explainer video for this section.

Общее объясняющее видео по UE5 для этого раздела.

Gameplay Framework

Server-only authority in `GameMode`; synchronized match data in `GameState`; per-user stats in `PlayerState`.

Server-only authority в `GameMode`; синхронизированное состояние матча в `GameState`; персональные данные игрока в `PlayerState`.

Physics & Events

Use Chaos Physics callbacks in C++, then surface high-level events to Blueprints for presentation and VFX routing.

Используйте Chaos Physics callbacks в C++, а затем отдавайте в Blueprints события верхнего уровня для презентации и VFX-логики.

Layered module map

`CoreRuntime` - authority, replication, save state
`GameFeatures` - optional packs, feature toggles, DLC-like modules
`Presentation` - UI, camera logic, Blueprint widget composition

Note

`UGameInstanceSubsystem` is ideal for cross-level services like telemetry and matchmaking adapters.

`UGameInstanceSubsystem` подходит для кросс-уровневых сервисов: телеметрия и адаптеры матчмейкинга.

Warning

Do not execute game-rule decisions in widgets. UI state can desync during network lag.

Не исполняйте game-rule решения в виджетах. UI-состояние может десинхронизироваться при сетевых задержках.

Tip

Group replicated properties by update frequency and use dormancy aggressively.

Группируйте реплицируемые свойства по частоте обновлений и активно используйте dormancy.

Source/CoreRuntime/MatchRuntimeSubsystem.h
UCLASS()
class UMatchRuntimeSubsystem : public UGameInstanceSubsystem
{
  GENERATED_BODY()

public:
  virtual void Initialize(FSubsystemCollectionBase& Collection) override;

  UFUNCTION(BlueprintCallable)
  void StartSession(const FString& MapId);

private:
  UPROPERTY()
  TObjectPtr<UAssetManager> AssetManager;
};