mcpField
U
unreal-thirdparty

unreal-thirdparty

github.com/maystudios開発26104 回インストール11 週間前に更新
リポジトリ

unreal-thirdparty について

Unreal Engine の C++ プラグインにサードパーティライブラリを組み込むためのリファレンススキルです。リンク方式、プラットフォームや ABI の制約、パッケージング、ビルド時の問題を扱います。

主な機能

  1. 01静的・動的ライブラリのリンク方式
  2. 02Build.cs のプロパティとモジュール設定
  3. 03プラットフォーム別 ABI とパッケージング
  4. 04コンパイラー設定を分離するバリアモジュール
  5. 05一般的な問題と UE バージョン変更

活用シーン

  1. 01Unreal Engine プラグインへの事前ビルドライブラリの追加
  2. 02DLL などの実行時依存ファイルのパッケージング
  3. 03リンカーやプラットフォーム ABI の問題調査

インストール

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

$npx skills add https://github.com/maystudios/claude-skills --skill unreal-thirdparty

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
build-system.md
linking-patterns.md
patterns-and-pitfalls.md
platform-specifics.md

詳細

Unreal Engine サードパーティライブラリの統合 -- C++ ガイド

公式ドキュメント(最新情報は必ずご確認ください)

ソースURL
Epic:サードパーティライブラリの統合https://dev.epicgames.com/documentation/unreal-engine/integrating-third-party-libraries-into-unreal-engine
Epic コミュニティ:静的ライブラリ + Blueprint チュートリアルhttps://dev.epicgames.com/community/learning/tutorials/0yJy/unreal-engine-fab-c-creating-your-own-3rd-party-function-library-and-using-it-in-blueprints
UE フォーラム:仕組みを理解するhttps://forums.unrealengine.com/t/adding-third-party-libraries-to-unreal-understanding-how-this-works/211244
georgy.dev:サードパーティライブラリの統合https://georgy.dev/posts/third-party-integration/
unrealcode.net:ライブラリをラップするhttps://www.unrealcode.net/WrappingALibrary/
Linux ABI / Sysroot ガイドhttps://pgaleone.eu/2023/06/18/unreal-engine-third-party-linux-sysroot-dependencies/
GitHub:Boost/PCL プラグインの例https://github.com/ValentinKraft/Boost_PCL_UnrealThirdPartyPlugin
GitHub:UnrealImGui(参考実装)https://github.com/IDI-Systems/UnrealImGui
Engine の ThirdParty ソースEngine/Source/ThirdParty/(バンドルする前にご確認ください。Epic は libcurl、zlib、libpng、OpenSSL などを同梱しています。)
コミュニティの追加リソース
ソースURL
UE コミュニティ Wiki:カスタム ThirdParty をゼロから作成するhttps://unrealcommunity.wiki/adding-custom-third-party-library-to-plugin-from-scratch-867b28
Yulong He:DLL プラグイン + パッケージ化(Medium)https://yulonghe.medium.com/ue5-how-to-create-a-plugin-that-works-with-dlls-packaging-and-external-files-11f8ff9d7491
Marieke van Neutigem:UE5 向けプラグインの更新https://mariekevanneutigem.nl/blog/pV20/updating-a-plugin-with-third-party-library-for-ue5
Adam Rehn:クロスプラットフォーム + Conanhttps://adamrehn.com/articles/cross-platform-library-integration-in-unreal-engine-4/
Parallelcube:モバイル / デスクトップ向け ThirdPartyhttps://www.parallelcube.com/2018/03/01/using-thirdparty-libraries-in-our-ue4-mobile-project/
AGX Dynamics:Barrier モジュールのパターンhttps://us.download.algoryx.se/AGXUnreal/documentation/current/agx-api-access.html
GitHub:UE4CMake(CMake 統合)https://github.com/caseymcc/UE4CMake
GitHub:CMakeUnrealhttps://github.com/kaustubh138/CMakeUnreal
GitHub:UnrealMacroNukehttps://github.com/hiili/UnrealMacroNuke
GitHub:UnrealNlohmannJsonhttps://github.com/dclipca/UnrealNlohmannJson
GitHub:shadowmint/ue4-static-pluginhttps://github.com/shadowmint/ue4-static-plugin
GitHub:iFunFactory Funapi(マルチプラットフォーム)https://github.com/iFunFactory/engine-plugin-ue4
Satisfactory Modding:ThirdPartyhttps://docs.ficsit.app/satisfactory-modding/latest/Development/Cpp/thirdparty.html
slowburn.dev:UE のアップグレード(Build.cs の変更)https://slowburn.dev/dataconfig/Advanced/UEUpgrades.html
alain.xyz:サードパーティライブラリの使用https://alain.xyz/blog/ue4-working-with-3rd-party-libraries
dawnarc.com:Build.cs のメモhttps://dawnarc.com/2019/01/ue4build.cs-notes/
ikrima.dev:ビルドファイルの解説https://ikrima.dev/ue4guide/archived_content/unreal-engine-4-build-file-demystified-dmitry-yanovsky/
ikrima.dev:外部 DLL のリンクhttps://ikrima.dev/ue4guide/build-guide/plugins-modules/linking-external-dlls-or-libraries/
gg-labs:DLL のリンクhttps://unreal.gg-labs.com/wiki-archives/devops/linking-dlls
conan-ue4cli ドキュメントhttps://docs.adamrehn.com/conan-ue4cli/read-these-first/introduction-to-conan-ue4cli

プラグインテンプレート

UE にはサードパーティライブラリのプラグインテンプレートが用意されています。エディターで、プラグイン > 新規プラグイン > サードパーティライブラリ(一番下までスクロール)を選択します。これにより、DLL ベースの統合に必要なひな形が生成されます。静的ライブラリの場合は、Build.cs での 2 行の方法がより簡単です。

コアアーキテクチャ

すべてのプロパティとパス変数を含む Build.cs の完全なリファレンスについては、references/build-system.md を参照してください。

統合フロー:

Third-Party Source (or prebuilt binaries)
  |
  v
[Optional: Recompile with UE toolchain for ABI compat]
  |
  v
Place headers + libs in Plugin/Source/ThirdParty/
  |
  v
Create External Module (.Build.cs with ModuleType.External)
  |-- PublicIncludePaths        -> header directories
  |-- PublicAdditionalLibraries -> .lib / .a files
  |-- PublicDelayLoadDLLs       -> DLL names (Windows delay-load)
  |-- RuntimeDependencies       -> .dll / .so / .dylib staging
  |-- PublicDefinitions         -> preprocessor macros
  v
Consumer Module depends on External Module
  |-- PublicDependencyModuleNames.Add("MyThirdPartyLib")
  |-- #include with THIRD_PARTY_INCLUDES_START/END
  v
Use library API in UE C++ code

推奨ディレクトリ構成:

MyPlugin/
  MyPlugin.uplugin
  Source/
    MyPlugin/                        # Runtime module (your code)
      MyPlugin.Build.cs
      Private/
      Public/
    ThirdParty/
      MyLibrary/                     # External module (no source)
        MyLibrary.Build.cs           # Type = ModuleType.External
        include/                     # Library headers
        lib/
          Win64/  *.lib
          Linux/  *.a or *.so
          Mac/    *.a or *.dylib
  Binaries/
    ThirdParty/MyLibrary/Win64/      # DLLs (if dynamic linking)

4 つの統合方法

各方法の詳しいコード例については、references/linking-patterns.md を参照してください。

方法使用する場面Build.cs のプロパティ
静的ライブラリ最も簡単な方法。単一の実行ファイルで、DLL の配布は不要PublicAdditionalLibraries
動的ライブラリ + インポートライブラリコンパイル時にシンボルを解決する DLLPublicAdditionalLibraries + PublicDelayLoadDLLs + RuntimeDependencies
動的ライブラリ、インポートライブラリなしGetDllExport による実行時の関数ポインター検索RuntimeDependencies のみ
マルチプラットフォーム静的ライブラリプラットフォームごとのライブラリを使用するクロスプラットフォームプラグインTarget.Platform の切り替えを含む PublicAdditionalLibraries

ライブラリのファイル形式

プラットフォーム静的動的インポートライブラリプレフィックス
Windows.lib.dll.libなし
Linux / Android.a.so該当なしlib
macOS / iOS.a.dylib該当なしlib

Build.cs クイックリファレンス

プロパティ目的
Type = ModuleType.Externalモジュールはビルド済みライブラリをラップし、UE ソースのコンパイルは行いません
PublicIncludePathsヘッダーの検索ディレクトリ
PublicSystemIncludePaths同じ用途ですが、これらのヘッダーからの警告を抑制します
PublicAdditionalLibraries静的ライブラリ/インポートライブラリのファイルパス
PublicDelayLoadDLLsWindows の遅延読み込みに使用する DLL のファイル名
RuntimeDependenciesパッケージング時に実行ファイルと一緒に配置するファイル
PublicDefinitionsプリプロセッサ定義("WITH_MYLIB=1")
PublicFrameworksmacOS フレームワーク
bUseRTTIRTTI を有効化します(Boost や一部の C++ ライブラリで必須)
bEnableExceptionsC++ の例外を有効化します(多くのライブラリで必須)
bForceEnableRTTIエンジン全体で RTTI を強制的に有効化します(TargetRules 内)

プラットフォーム固有の考慮事項

Windows の DLL 読み込み、macOS の @rpath/dylib、Linux の ABI/sysroot の詳細については、references/platform-specifics.md を参照してください。

主なルール:

  • Windows: DLL は名前のみで検索されます(インポートテーブルにパスはありません)。FPlatformProcess::GetDllHandle() または遅延読み込みを使用してください。UE は Engine/Project/Plugin の Binaries/Win64/ ディレクトリを検索します。
  • macOS: dylib は @rpath のインストール名を使用します。install_name_tool -id @rpath/libfoo.dylib で設定してください。UBT は RPATH エントリーを自動的に追加します。
  • Linux: C++ ライブラリは UE の Clang + libc++(システムの libstdc++ ではありません)で再コンパイルする必要があります。C ライブラリ(安定した ABI)は再コンパイル不要です。UE の CMake ツールチェーンファイルを使用してください。

よくあるパターンと落とし穴

実装レシピ、重大な落とし穴、トラブルシューティングについては、references/patterns-and-pitfalls.md を参照してください。

重大な落とし穴:

  • UE の check マクロは、check を識別子として使用するサードパーティコードと衝突します。#undef check を使用するか、インクルードをラップしてください
  • /MD(マルチスレッド DLL)でコンパイルし、UE のランタイムに合わせてください。CRT が一致しないとリンカーエラーが発生します
  • RTTI と例外はデフォルトで無効です。Boost、PCL、および多くの C++ ライブラリでは、External モジュールとそれを使用するすべてのモジュールの両方で bUseRTTI = true と bEnableExceptions = true が必要です
  • Release ライブラリのみを使用してください。UE は Release CRT を使用するため、Debug でビルドしたライブラリは _ITERATOR_DEBUG_LEVEL の不一致やアクセス違反を引き起こします
  • VS のプロジェクト設定は無視されます。有効なのは .Build.cs のみで、Visual Studio のプロパティは UBT にまったく影響しません
  • Binaries/ThirdParty/ は再生成されません。削除するとテンプレートの DLL が失われ、UBT では再ビルドできません
  • Linux の ABI 不一致。libstdc++ でコンパイルした C++ ライブラリは、UE の libc++ とは異なるシンボルマングリングを生成します

UE のバージョンごとの Build.cs の変更

バージョンごとの完全な変更履歴については、references/build-system.md を参照してください。

サードパーティとの連携に影響する主な破壊的変更:

  • UE 5.0: FVector が 3 つの double に変更されました。TObjectPtr が生の UObject ポインターに置き換わりました
  • UE 5.2: bEnforceIWYU(bool)が IWYUSupport(enum)に変更されました
  • UE 5.3: BuildSettingsVersion.V4 のデフォルトが C++20 になりました。TRemoveConst は非推奨となり、std::remove_const に置き換わりました
  • UE 5.4: デフォルトの MSVC 警告レベルが /W4 に変更されました。FText の内部実装が TSharedRef から TRefCountPtr に変更されました
  • UE 5.5: 新しい Engine/Build/BatchFiles/RunUBT スクリプトが、UBT の直接呼び出しに置き換わりました。PER_MODULE_BOILERPLATE は不要になりました。StructUtils プラグインは非推奨となり、エンジンに移動しました
  • UE 5.6: FString::Appendf で static constexpr の書式文字列が必須になりました。GMalloc へのアクセスは非推奨になりました
  • UE 5.7: FindObject では bExactClass が非推奨となり、EFindObjectFlags が使用されます

高度なパターン

バリアモジュール(互換性のないコンパイラー設定の分離)

サードパーティライブラリで bUseRTTI = true と bEnableExceptions = true が必要でも、その影響範囲を最小限に抑えたい場合は、ライブラリをクリーンなインターフェースの背後に隔離するバリアモジュールを作成します。

Plugin/
  Source/
    ThirdParty/MyLib/          # ModuleType.External (headers + libs)
    MyLibBarrier/              # Barrier module (bUseRTTI=true, bEnableExceptions=true)
      Public/  -> clean types only, no third-party headers, no UObject.h
      Private/ -> wraps third-party includes with BeginIncludes/EndIncludes
    MyPlugin/                  # Main module, depends on MyLibBarrier (NOT on MyLib directly)

バリアモジュールのパブリックヘッダーにサードパーティヘッダーをインクルードしたり、UObject.h のインクルードを発生させたりしてはいけません。すべてのサードパーティ型は、不透明なバリア型として渡します。本番環境での例については、AGX Dynamics のドキュメントを参照してください。

UE4CMake による CMake 連携

UE4CMake プラグインは Build.cs の CMakeTarget.add() を提供し、CMake ライブラリを UBT の一部としてビルドできます。

CMakeTarget.add(Target, this, "TargetName",
    Path.Combine(ModuleDirectory, "../Libs/Source"),
    "-DCUSTOM_OPTION=ON", false);

CMake の出力から PublicIncludePaths と PublicAdditionalLibraries を自動的に設定し、変更検出のためにソースファイルを ExternalDependencies に登録します。また、PRAGMA_PUSH_PLATFORM_DEFAULT_PACKING / PRAGMA_POP_PLATFORM_DEFAULT_PACKING による構造体のパッキングにも対応します。

UnrealMacroNuke(包括的なマクロ除染)

check 以外にも多数の UE マクロと競合するライブラリでは、UnrealMacroNuke を使うと、競合するすべてのマクロを未定義にして再定義する、対になるヘッダーを生成できます。

#pragma warning(push)
#pragma warning(disable: <codes>)
#include "UndefineMacros_UE_5.3.h"
#include "third_party/library.hpp"
#include "RedefineMacros_UE_5.3.h"
#pragma warning(pop)
Conan パッケージマネージャーとの連携

conan-ue4cli パッケージは、UE にバンドルされた依存関係に対するサードパーティライブラリのビルドを自動化します。Build.cs は conan install を実行し、conanbuildinfo.json を解析してインクルードパス、ライブラリパス、定義を抽出します。UE とサードパーティライブラリが同じライブラリの異なるバージョン(例:zlib、libpng)に依存している場合に発生するシンボルインターポジションの解決に不可欠です。

Android APL(Android パッケージングレイヤー)

Android のサードパーティライブラリをネイティブライブラリとしてデプロイし、Java と連携するには、APL XML ファイルが必要です。

// Build.cs -- Android
AdditionalPropertiesForReceipt.Add("AndroidPlugin",
    Utils.MakePathRelativeTo(
        Path.Combine(ThirdPartyPath, "LIBRARY_APL.xml"),
        Target.RelativeEnginePath));
変更検出用の外部依存関係

変更時に再ビルドをトリガーする外部ファイルを登録します。

ExternalDependencies.Add(Path.Combine(ModuleDirectory, "include", "version.h"));

指定したファイルに変更があった場合、UBT がメイクファイルを再生成するようになります。ヘッダーファイルやライブラリバイナリの更新を追跡する場合に便利です。

AddEngineThirdPartyPrivateStaticDependencies

独自のコピーを管理せずに、エンジンに同梱されているライブラリを使用します。

AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL", "libWebSockets", "libcurl", "zlib");

エンジンにすでに同梱されているライブラリを使用する場合は、この方法が推奨されます。

コメント