#author("2017-01-12T09:05:07+00:00","default:nitta","nitta") #author("2017-01-12T09:52:51+00:00","default:nitta","nitta") [[UnrealEngine]] *UnrealEngine/Plugins [#i3f8afee] **インストールされているPluginを調べる。 [#ne1f10a1] [Edit (編集)]メニューから[Plugins(プラグイン)]編集イターフェイスを開く。 メインの[Window]メニューから、プラグインエディタにアクセスできる。 コード付きのプラグインは、Sourceフォルダを持つ。 ** Plugin Folders [#kcdc04db] プラグインは、Unreal Engine のプラグイン用の検索パスに置くこと。 ,Plugin type, Search Path ,Engine plugin, /UE4 root/Engine/Plugins/My Engine Plugin/ ,Game plugin, /My Project/Plugins/My Game lugin/ 基準となる Plugins フォルダの下に、サブディレクトリを作ってpluginをそこに置いても構わない。 pluginが見つからない限り、自動的に下位のサブディレクトリをスキャンする。 ただし、1つでもpluginを発見すると、それより下位のサブディレクトリはスキャンしない。 Unreal Engine は .upluginという拡張子のファイルを探すことで、個々のplugin を発見する。 これはテキストファイルで、基本情報を保持している。 ***Code in Plugin [#j0d1084a] Visual Studio や Xcode でプロジェクトを生成すると、 (*.Build.cs ファイルが存在する)Source フォルダを持つ plugin が追加され、 ソースコードを調べやすくなる。 このような plugin は、プロジェクトをコンパイルする際に、 Unreal Build Toolが自動的にコンパイルする。 pluginには何個もソースフォルダが存在して構わないが、普通は1個である。 plugin では、新しい UObject 型 (UCLASS, USTRUCT, etc) を、そのモジュールの下位フォルダで宣言することができる。 plugin のソースファイルは、他のC++のモジュールとほとんど同じである。 plugin で異なるのは、Public source file のヘッダである。 たいていの plugin では、 Public source folder にあるヘッダで public APIs をエクスポートする必要はない。したがって通常 Public source folder は空である。 例外は以下の通り。 - plugin に複数の C++ モジュールがある場合。Publicフォルダは複数のモジュールで共有できる。 - engine plugin ではなくgame plugin を作成していて、pluginモジュールを静的リンクしたい場合。 - public interface headers を plugin と共に配布したい場合。 ** Content in Plugins [#b871b614] Unreal Engine は バイナリだけではなく、コンテンツを含むpluginをサポートしている。 コンテンツを含む場合は、'CanContainContent' 設定を 'true' にすること。 まだ、実装中なので、動かないかも。 ** Plugins in your Game Project [#t12d280b] あなたのゲームプロジェクトの 'Plugins/' フォルダの下位にある plugin は、 game engine や editor が起動するときに発見されロードされる。 ソースフォルダや *.Build.cs ファイルを含むモジュールを plugin が含んでいる時は、 plugin のコードは C++ のプロジェクトファイルに自動的に加えられる。 ソースのサブフォルダを持たない plugin の場合は、プロジェクトジェネレータに無視され C++プロジェクトのファイルとしては表示されない。しかし、バイナリが存在する限り、 起動時にロードされる。 ** Engine Plugins [#oe3c6b4e] Engine ディレクトリにある built-in plugins は、全てのゲームプロジェクトで利用できる。 ゲームモジュールそのものや、ゲームモジュールのplugin よりも前にロードされる。 Engine plugins は次の要件を満たす必要がある。 - 静的にリンクしてはならない。 ** Plugin の配布 [#p057f9a8] + plugin の記述子ファイル (.uplugin) を編集し、名前、モジュール、バージョンなどを設定する。 + Editor の Plugin Browser で対象の plugin を見付けたら 'Edit...' リンクをクリックして、pluginに関連したメタデータ (description, ドキュメントのリンクなど)を更新する。 + 'Package...' リンクをクリックして、配布用フォルダへ plugin をパックする。 デフォルトでは、ソースコード、バイナリ、コンテンツだけが plugin でパッケージされる。 追加ファイルを含めたい場合は、Config/FilterPlugin.ini というファイルを作り、 追加パスを記述する。 [FilterPlugin] /ThirdParty/... /MyOtherFolder/... ** Plugin Descriptor files [#z4618dc7] plugin descriptor は、ファイルの拡張子が .uplugin である Json 形式のファイルである。 ファイル名の最初の部分は常にplugin の名前になる。 { "FileVersion" :3, "FriendlyName" :"UObject Example Plugin", "Version" :1, "FriendlyVersion" :"1.0", "Description" :"An example of a plugin", "Modules" : [ { "Name" :"UObjectPlugin", "Type" :"Developer" } ] } Module Descriptors { "Name" : "UObjectPlugin", "Type" : "Developer", } Icon File を必要とする ,/Resources, Must, 128x128 PNG, ,/Icno128.png, Must, File, ** Pluginの例 [#d4b9ac83] -BlankPlugin -UObjectPlugin + サンプルプラグインを新規フォルダにコピーし、名前を変更する。 + ゲームプロジェクトのディレクトリに 'Plugins/' フォルダを作成し、その下に自分のpluginをコピーする。 GAME_PROJECT_FOLDER/Plugins/BlankPlugin GAME_PROJECT_FOLDER/Plugins/UObjectPlugin + C++ プロジェクトを Rebuild する。 + Editor または Game を起動する。 まだpluginは無効である。 + Window->Plugins で Plugin Editor を開き、plugin を有効にする。 + Editor を再起動する。pluginは自動的にロードされる。 + 確認する。Window->Developer Tools -> Module Viewer + 確認する。コードデバッガで、プラグインの開始コードにbreak point を設定する。 FBlankPlugin::StartupModule()