SPARKCREATIVE Tech Blog

https://www.spark-creative.jp/

UE4Plugin作成への理解

 

はじめに

どうも、新しい春の時期がやって参りました。

この時期は環境が変わったり新たな1歩を踏み出したりと大事な節目となっている気がします。

私自身も大きな目標があるので気持ちを入れ替えて新たな1歩を踏み出そうと思います。

 

今回のブログではUE4プラグイン作ってみたい人向けに書いていきます。

 

UE4Plugin概要

UE4プラグインはコードとデータのコレクションで、ディベロッパーがプロジェクトごとにエディタで簡単に有効化、 無効化できます。

プラグインは、ランタイムでゲームの機能追加、エンジンのビルドイン機能の変更や新機能追加、新しいファイルタイプの作成、そして新しいメニュー、ツールバーコマンド、サブモードでエディタ機能の拡張を行います。

既存のUE4サブシステムの多くは、プラグインを使用して拡張できるように設定されています。

 プラグインは作れるようになったほうがよいと思っています。

プラグイン作成手順

  1. UE4プロジェクト作成

    f:id:spark-sato-yosuke:20210329162631p:plain

    C++のプロジェクトに設定してからプロジェクトを作成します。

  2. プラグインブラウザを起動

    f:id:spark-sato-yosuke:20210329163137p:plain

    編集からプラグインの一覧が確認できるプラグインブラウザを開きます。

  3. 新しいプラグインを選択

    f:id:spark-sato-yosuke:20210329163932p:plain

    プラグインブラウザから右下の新しいプラグインを選択します。

  4. プラグインの初期設定

    f:id:spark-sato-yosuke:20210329164205p:plain

    C++プロジェクトの場合は7つのテンプレートが表示されるが

    BPプロジェクトの場合は「コンテンツのみ」のテンプレートしか表示されないため

    C++プロジェクトでプラグインの作成を行います。

    Auther : プラグインの作成者

    Description : プラグインの説明文

    AutherURL : Twitter等のプロフィールを公開するものがあれば付けるとよい

    IsBataVersion : プラグインブラウザ上でベータマークを表示非表示のbool

  5. 作成完了

    f:id:spark-sato-yosuke:20210329165535p:plain
    プラグインブラウザのOtherフォルダに
    新しく作ったプラグインが表示されていたらプラグインの作成は完了です。

空白のテンプレートの初期構成の意味

f:id:spark-sato-yosuke:20210329170523p:plain

以下"Game/Project名/Plugins/"のパスは省略

  1. Resources/Icon128.png

    f:id:spark-sato-yosuke:20210329172638p:plain赤枠で囲まれた画像が入っています。

  2. Source/Plugin1.uplugin

    f:id:spark-sato-yosuke:20210329171541p:plain


    "FileVersion"
    プラグイン記述子のファイルバージョンを意味し、通常はエンジンkが許可する1番高いバージョンを設定する必要があります(現在制作時に自動で「3」になっています)。
     

    "Version": 1
    プラグインのバージョン番号です。プラグインのバージョン番号は、プラグインのバージョンごとに増やす必要があります。システムは、プラグインの1つのバージョンが別のバージョンよりも新しいかどうか判断したり、他の要件を適応したり変更が容易になります。このバージョン番号はプラグインブラウザのUIには表示されません。UIに表示させたい場合は下の"VersionName"を使用します。

    "VersionName": "1.0"

    f:id:spark-sato-yosuke:20210329172607p:plain

    プラグインブラウザ上の赤枠の数字を変更可能

    "FriendlyName": "TestPlugin1"

    f:id:spark-sato-yosuke:20210329172822p:plain

    プラグインの分かりやすい表示名変更

    "Description": ""

    f:id:spark-sato-yosuke:20210329174400p:plain

    プラグインブラウザに表示させるために
    "Description": "説明文"と入力
    作成したプラグインの説明文

    "Category": "Other"

    f:id:spark-sato-yosuke:20210329174341p:plain
    UE4プラグイン一覧で表示されるカテゴリー

    "CreatedBy": ""

    f:id:spark-sato-yosuke:20210329175033p:plain

    プラグインの初期設定の記述子データにあった
    Auther : プラグインの作成者
    と同じものになっています。

    "CreatedByURL": ""

    f:id:spark-sato-yosuke:20210329175311p:plain

    赤枠内をクリックするとここで設定されているURLに飛びます。
    プラグインの初期設定の記述子データにあった
    AutherURL : Twitter等のプロフィールを公開するものがあれば付けるとよい
    と同じものになっています。

    "DocsURL": ""

    f:id:spark-sato-yosuke:20210329175506p:plain
    赤枠内をクリックするとここで設定されているURLに飛びます。
    プラグインのドキュメントを記載しているページを記載します。

    "MarketplaceURL": ""
    UnrealEngineのマーケットプレイスに出す人は
    記載しなければ再提出になるらしいです。

     

    "SupportURL": ""
    f:id:spark-sato-yosuke:20210329175528p:plain
    赤枠内をクリックするとここで設定されているURLに飛びます。
    質疑応答、サポートページがあるのなら記載します。

    "CanContainContent": true
    プラグインにコンテンツを含めるかどうかを決定できるBoolです。 
    trueならプラグインフォルダ内の「Content」フォルダ以下にに配置したuassetがプラグインのアセットとして利用可能になります。

    "IsBetaVersion": false

    f:id:spark-sato-yosuke:20210329181302p:plain

    trueでプラグインエディタ上でBataマークを表示できます。

    "IsExperimentalVersion": false
    UnrealEngine4ドキュメント
    「UIでプラグインを実験的なものとしてマークします。」
    と書いてあるのですがどこが変化しているかわかりませんでした。

    "Installed": false

    f:id:spark-sato-yosuke:20210329182202p:plain

    プラグインがエンジンの上にインストールされたことを示します。
    trueにするとカテゴリーが
    プロジェクト>Other
    から
    インストール済み>Other
    になります。

    "Modules": [{"Name": "TestPlugin"}]
    表示名ではなくモジュールの名前になるので基本的に変更する必要ない

    "Modules": [{"Type": "Runtime"}]

    読み込み時タイプ名 概要
    Runtime 通常実行時には読み込む
    RuntimeNoCommandlet 実行時、コマンドレットでない場合読み込む
    RuntimeAndProgram 実行時かつビルドターゲットがProgramである場合読み込む
    CookedOnly クックビルドされた後の場合読み込む
    Developer デベロッパツールをサポートしたエンジン上でのみ読み込む
    Editor エディタビルドの場合読み込む
    EditorNoCommandlet エディタビルドかつコマンドレットでない場合読み込む
    Program Programビルドされた場合のみ読み込む
    ServerOnly Serverビルドされた場合のみ読み込む
    ClientOnly Clientビルドされた場合のみ読み込む


    "Modules": [{"LoadingPhase": "Default"}]

    読み込み順 ローディングフェーズ名 タイミング
    1 EarliestPossible 可能な限り最も早く読み込みます
    2 PostConfigInit エンジン設定の初期化後に読み込みます
    3 PreEaryLoadingScreen PreLoadingScreenよりも前に読み込みます
    4 PreLoadingScreen 画面が起動する前に読み込みます
    5 PreDefault Defaultの前に読み込みます
    6 Default 通常のモジュールロードタイミングで読み込みます
    7 PostDefault Defaultの後に読み込みます
    8 PostEngineInit エンジンの初期化処理が終了したあとに読み込みます

  3. Source/Plugin1/Plugin1.Build.cs

     ModuleRules
    UnrealEngine4ではコンパイルの最適化、デバッグシンボルの設定は自動で作成してくれます。
    ここでは、include、ライブラリのパス、使用するライブラリ名の指定を行えます。

    PublicIncludePaths
    プラグイン本体のパブリックフォルダパスを追加します。
    「Public」フォルダからすべてのファイルを検索できるので、この設定は現在必要がないそうです。

    PrivateIncludePaths
    プラグイン本体のプライベートフォルダ等のパスを追加します。
    他のモジュールへ公開されていない、このモジュール内部のインクルードファイルへのすべてのパスのリストです。

    PublicDependencyModuleNames
    プラグインのパブリック内でincludeするモジュール名を追加します。
    パブリック依存モジュール名のリスト(パスは不要)です。
    パブリックソースファイルが必要とするモジュールです。


    PrivateDependencyModuleNames
    プラグインのプライベート内でincludeするモジュール名を追加します。
    プライベート依存モジュール名リストです。
    プライベートコードは依存するモジュールです。

    DynamicallyLoadedModuleNames
    ランタイム時にこのモジュールが必要とする場合のある追加モジュールです。
     

さいごに

読んでいただきありがとうございます。

私が使用する前にできるだけ理解しておきたいと考える人なので

初期構成の説明に力が入ってしまいました。

 

後半に文字が多くなってしまっているので

 次回に作成したプラグインを使用した処理をについて

書きたいと考えています。

 

 

参考URL

docs.unrealengine.com

docs.unrealengine.com

qiita.com

qiita.com