mcpField
U
unreal-engine-cpp-pro

unreal-engine-cpp-pro

github.com/sickn33開発48.7k1.4k 回インストール今日更新
リポジトリ

unreal-engine-cpp-pro について

Unreal Engine 5.x の C++ 開発者向けガイダンススキルです。エンジン規約、UObject の寿命管理、パフォーマンス、実装パターンを扱います。

主な機能

  1. 01UObject の寿命とガベージコレクション
  2. 02リフレクションと Blueprint への公開
  3. 03Tick とパフォーマンスの指針
  4. 04Epic の命名規則
  5. 05アセット読み込みとソフト参照

活用シーン

  1. 01Actor と Component の実装
  2. 02ガベージコレクション問題の調査
  3. 03性能が重要なコードの最適化
  4. 04C++ 機能の Blueprint への公開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill unreal-engine-cpp-pro

インストール後、Claude Code で/unreal-engine-cpp-proを入力して読み込まれたか確認します。

同梱ファイルexamples/ExampleActor.cppexamples/ExampleActor.h

詳細

Unreal Engine C++ Pro

このスキルでは、C++ を使用して Unreal Engine 5 で開発するための、専門家レベルのガイドラインを提供します。堅牢で高パフォーマンス、かつ標準に準拠したコードの作成に重点を置いています。

使用するタイミング

次の場合にこのスキルを使用します。

  • Unreal Engine 5.x プロジェクト向けの C++ コードを開発する場合
  • Actor、Component、または UObject 派生クラスを作成する場合
  • Unreal Engine でパフォーマンスが重要なコードを最適化する場合
  • メモリーリークやガベージコレクションの問題をデバッグする場合
  • Blueprint に公開する機能を実装する場合
  • Epic Games のコーディング標準と規約に従う場合
  • Unreal のリフレクションシステム(UCLASS、USTRUCT、UFUNCTION)を使用する場合
  • アセットの読み込みとソフト参照を管理する場合

次の場合はこのスキルを使用しないでください。

  • Blueprint のみのプロジェクト(C++ コードなし)で作業する場合
  • Unreal Engine 5.x より前のバージョンを対象に開発する場合
  • Unreal 以外のゲームエンジンで作業する場合
  • Unreal Engine の開発に関係のないタスクの場合

基本原則

  1. UObject とガベージコレクション:

    • UObject* メンバー変数がガベージコレクター(GC)によって追跡されるよう、常に UPROPERTY() を使用します。
    • リフレクション対象の UObject グラフ外でスコープ付きの強参照を保持する場合は、TStrongObjectPtr<> を慎重に使用します。オブジェクトを手動でルート化することは避けてください。手動で AddToRoot() を呼び出す場合は、ライフサイクルを通じて対応する RemoveFromRoot() を確実に管理する必要があります。
    • IsValid() のチェックと nullptr の違いを理解してください。IsValid() は、破棄待ち状態を安全に処理します。
  2. Unreal リフレクションシステム:

    • リフレクションシステムと Blueprint に型を公開するには、UCLASS()、USTRUCT()、UENUM()、UFUNCTION() を使用します。
    • 可能な限り BlueprintReadWrite の使用を最小限に抑えます。UI やレベルの BP のロジックによって変更されるべきでない状態には、BlueprintReadOnly を優先します。
  3. パフォーマンスを最優先:

    • Tick:デフォルトでは Tick を無効にします(bCanEverTick = false)。どうしても必要な場合にのみ有効にしてください。タイマー(GetWorldTimerManager())またはイベント駆動型のロジックを優先します。
    • キャスト:処理負荷の高いループ内で Cast<T>() を使用しないでください。BeginPlay で参照をキャッシュします。
    • Struct と Class:オーバーヘッドを削減するため、データ量が多く、UObject ではない型には F Struct を使用します。

命名規則(厳守)

Epic Games のコーディング標準に従います。

  • テンプレート:T を接頭辞にします(例:TArray、TMap)。
  • UObject:U を接頭辞にします(例:UCharacterMovementComponent)。
  • AActor:A を接頭辞にします(例:AMyGameMode)。
  • SWidget:S を接頭辞にします(Slate ウィジェット)。
  • Struct:F を接頭辞にします(例:FVector)。
  • Enum:E を接頭辞にします(例:EWeaponState)。
  • インターフェース:I を接頭辞にします(例:IInteractable)。
  • Boolean:b を接頭辞にします(例:bIsDead)。

一般的なパターン

1. 堅牢なコンポーネントの検索

Tick 内で GetComponentByClass を呼び出すのは避けてください。PostInitializeComponents または BeginPlay で実行します。

void AMyCharacter::PostInitializeComponents() {
    Super::PostInitializeComponents();
    HealthComp = FindComponentByClass<UHealthComponent>();
    check(HealthComp); // Fail hard in dev if missing
}
2. インターフェースの実装

システム間の結合を疎にするには、インターフェースを使用します(例:インタラクションシステム)。

// Interface call check
if (IsValid(TargetActor) && TargetActor->Implements<UInteractable>()) {
    IInteractable::Execute_OnInteract(TargetActor, this);
}
3. ソフト参照(同期処理の例)

読み込み順序を強制する、大規模なアセットに対してハード参照(UPROPERTY(EditDefaultsOnly) TSubclassOf<AActor>)を使用するのは避けてください。TSoftClassPtr または TSoftObjectPtr を使用します。

UPROPERTY(EditAnywhere, BlueprintReadWrite)
TSoftClassPtr<AWeapon> WeaponClassToLoad;

void AMyCharacter::Equip() {
    if (WeaponClassToLoad.IsPending()) {
        WeaponClassToLoad.LoadSynchronous(); // Or use StreamableManager for async
    }
}

デバッグ

  • ログ出力:カスタムカテゴリを指定して UE_LOG を使用します。
    DEFINE_LOG_CATEGORY_STATIC(LogMyGame, Log, All);
    UE_LOG(LogMyGame, Warning, TEXT("Health is low: %f"), CurrentHealth);
    
  • 画面メッセージ:
    if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Died!"));
    
  • ビジュアルロガー:AI のデバッグに非常に役立ちます。IVisualLoggerDebugSnapshotInterface を実装します。

PR 前のチェックリスト

  • この Actor は Tick を必要としますか?タイマーで代用できますか?
  • すべての UObject* メンバーが UPROPERTY でラップされていますか?
  • ハード参照(TSubclassOf)が読み込みチェーンを引き起こしていませんか?ソフトポインターに置き換えられますか?
  • EndPlay で、検証済みデリゲートをクリーンアップしましたか?

制限事項

  • タスクが上記の説明された範囲に明確に一致する場合にのみ、このスキルを使用してください。
  • 環境固有の検証、テスト、または専門家によるレビューの代わりとして、出力を扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。

アクターファイルは例示用であり、MYGAME_API の置き換え、プロジェクトヘッダーの生成、ターゲットエンジンでのビルドが必要です。LoadSynchronous() はゲームスレッドを停止させる可能性があります。レイテンシーが重要な処理では、ターゲットバージョンのストリーミング可能な非同期ロード API を使用してください。サポートされている場合は、リフレクション対応の TObjectPtr メンバーを優先してください。Epic のオブジェクトポインターに関するガイダンス。

コメント