C++ Integration

C++ Integration

Bridge low-level engine control with Blueprint usability

Define authoritative systems in C++, then expose constrained APIs through `UFUNCTION` and `UPROPERTY` metadata.

Интеграция C++

Соединяйте низкоуровневый контроль движка и удобство Blueprint

Определяйте authoritative-системы в C++, а затем открывайте ограниченные API через метаданные `UFUNCTION` и `UPROPERTY`.

Video Walkthrough

Видеообзор

Shared UE5 explainer video for this section.

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

Reflection Discipline

Annotate only stable interfaces. Avoid exposing transient internals that may break serialized assets.

Аннотируйте только стабильные интерфейсы. Не открывайте transient-внутренности, которые ломают сериализованные ассеты.

Networking API

Use reliable RPC for critical game state, unreliable RPC for frequent non-critical cosmetic updates.

Применяйте reliable RPC для критичного игрового состояния, unreliable RPC для частых некритичных косметических обновлений.

Note

BlueprintNativeEvent is useful when designers need override points without touching engine-level logic.

BlueprintNativeEvent полезен, когда дизайнерам нужны точки переопределения без изменения engine-уровня логики.

Warning

Never trust client-originated values in Server RPC without validation.

Никогда не доверяйте значениям от клиента в Server RPC без валидации.

Tip

Expose intent APIs, not transport details. Keep replication strategy internal to C++.

Экспортируйте intent-API, а не детали транспорта. Стратегию репликации держите внутри C++.

Source/NetGameplay/CombatAbilityComponent.h
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class UCombatAbilityComponent : public UActorComponent
{
  GENERATED_BODY()

public:
  UFUNCTION(Server, Reliable)
  void ServerActivateAbility(int32 AbilityId, FVector_NetQuantize TargetPoint);

  UFUNCTION(NetMulticast, Unreliable)
  void MulticastPlayAbilityFX(int32 AbilityId);

  UPROPERTY(ReplicatedUsing=OnRep_CooldownState, BlueprintReadOnly)
  TMap<int32, float> CooldownByAbility;

private:
  UFUNCTION()
  void OnRep_CooldownState();
};