UE4 Plugin作成時に詰まったところとかのメモ書き

※解説記事ではないです。あくまでメモなのでご注意を!(多分分かったことが増えたら整理します…)

とりあえずPluginを作成したい!


historiaさんの記事がとても分かりやすかったです

[UE4] プラグインによるエディタ拡張(1) 空のプラグインを追加する

とりあえずBlueprintから呼べる関数作りたい!


とりあえずUE4 C++でぐぐったら色々出てくるので眺める所から始めました。あとはTwitterとかで見かけた名前のPluginを片っ端から落として眺めてました。

CustomGravityPluginとVictoryPluginとかいいんじゃないでしょうか?コード量がそこそこあるので深い内容までは読み解いてないですがPluginに置けるお作法的なことの雰囲気はこれで掴んだ気がします。

alweiさんの記事の

UE4 C++コードをブループリントで使えるようにする(関数ライブラリー編)

これをPluginでどうやるのか試行錯誤するのが最初はオススメです。

やっぱりプログラミングの最初はHelloWorldです(多分)

UCLASS()の()の中って何書くんだろう?


エディターで編集可能にするかとかそういうの書く所です。

UE4のドキュメントに色々ありますよ!

メタデータ指定子

ゲームプレイ クラス

Properties

UBlueprintFunctionLibraryとか継承したい


必要な物を#includeしましょう。Pluginでは最初に作った時に「PCH」が末尾についてるヘッダファイルありますよね。あそこに記述してるものが多いです。

includeすべきヘッダファイルが分からない


継承したいものとか参照したいやつでググればドキュメントがひっかかるので一番下のReferencesってところのヘッダファイルの項目がそれです。

includeが上手く行かない


Plugin作った時にcsファイルがあったと思います。そこのPublicDependencyModuleNames.AddRangeの部分にドキュメントのReferencesのモジュールに書かれているやつを追加します。大体それで解決です。

ちなみにヘッダファイルを指定する時にはモジュールの名前以降の部分を追加すればオッケーです。

コンストラクタはどうすればいい?


基本的に

Hoge::Hoge(const FObjectInitializer& ObjectInitializer)

: Super(ObjectInitializer)

{

}

コンストラクタの引数はObjectInitializer以外にはないの?


PCIPっていうのもあります。4.6以降からは非推奨になったっぽいです。

AnswerHubに似たようなのがありました。

What is the PCIP?

.generatedファイルがincludeされない


これで半日潰したこと有ります!

VisualStudioでクリーンしてからビルドする

自分のPluginのフォルダにあるBinariesとIntermediateを消してからGenerate Visual Studio project filesする

自分は今のところこのどっちかで大丈夫です

AnswerHubに似たようなのがありました

how to create only header file while exist inside include generate.h

"Generate Visual Studio Project Files" did not auto-generate generated.h header files

Blueprintで関数や変数を検索する欄で階層を分けるには?


変数や関数をヘッダファイルで宣言する時にUPROPERTYとかUFUNCTIONとかすると思うんですが、そこにCategory="AA|BB"とかすれば出来ます。「|」で区切るごとに階層が深くなります

オリジナルのActorとかActorComponent作りたい


上にもかいたUCLASSのところをちゃんと書いておくとか、コンストラクタで設定しておかないと動かない関数があったりで注意が必要

あとInitialized Componentとかが出てくるのでちょっと戸惑います。

alweiさんの記事とか

UE4 C++コードをブループリントで使えるようにする(アクタークラス編)

ドキュメントの以下の部分とかが参考になるかも?

アクタ