<前文>
で勉強しています。
今回は、エディターモジュールを作る話です。
<本文>
<目的>
今、8章のだいたい中間ぐらいなのですが、教科書の説明によると、これより先は、すべてエディターモード用の特別なコードかつエンジンモジュールの話になるので、ここで、エディターモジュールの作り方を学びましょうとあります。それで、エディターモジュールの作り方を学びます。
<方法>
.uproject ファイルに以下のコードを足します。
全体では、こんな感じです。(カンマが必要になります。)
次に、source フォルダー内に、新しくフォルダーを一個作ります。フォルダーの名前は、.uprojectで新しく指定した”Name”と同じ名前にします。(この場合は、UE4CookbookEditorになります。)
その次に、UE4CookbookEditorフォルダー内に、UE4CookbookEditor.Build.cs ファイルを作ります。そこに以下のコードを足します。
更に、UE4CookbookEditorフォルダー内に、UE4CookbookEditor.h とUE4CookbookEditor.cppを作ります。そこに以下のコードを足します。
最後に.uproject ファイルを右クリックして、Generate Visual Studio Project filesを選択します。
<結果>
生成された、VSを開き、コンパイルします。出来たら成功です。
コンパイル出来たので、成功です。
<考察>
まとめると簡単ですが、2か所ケアレスミスをして、2時間くらい苦しんでいました。一つ目は、.uproject ファイルにコードを足す時に、カンマを忘れてました。もう一つは、h ファイルのコードの最後にセミコロン;を付けるのを忘れていました。セミコロンを付け忘れるなんて初歩的なミスをしてずっと気が付かないなんて。とミスを発見した時は絶句ものでしたが、よくよく考えてみると、普段はVSを使ってコードを書いているので、そういうミスはVSの方ですぐに見つけて知らせてくれるんですよね。今回はノートバット++でコードを書いたんですが、ほぼノートパット状態で使用したんで、エラーが表示されなかったみたいです。これからVS以外にコードを書く場合が増える場合は、ノートバット++の設定をよく勉強して、きちんとエラーが表示されるようにしたいです。もう一つのカンマの件は、教科書にカンマを忘れるなよ。と注意文付きで指摘されていましたが、しっかり忘れてました。
めでたしめでたし。で終れるところでしたが、そうはいかなかったのです。
この話を今回書くか、次のブログに書くか少し迷いましたが、こちらの方が相応しいと思いこちらに書きます。この次のレシピ(クックブックだからなのか、一つ一つの項目をこの教科書はレシピと呼んでいる。)、ツールバーに新しいボタンを作成する。で、このサンプルに更にコードを足して作りますが、すべてのコードを書き終えた後に、VSからビルドした後にデバックすると、
このようなメッセージが表示され、エラーになってしまいます(何回も繰り返してトライしたのでイメージのプロジェクト名が微妙に変わったりしています。)。どこで間違えたか調べるため、コードを一つずつ外していくと、このサンプルもVSからデバック出来ない事が判明します。このサンプルはビルドは出来ます。でもデバックしようすると、上記のメッセージを発してエラーになります。教科書にはビルドしてテストして下さいとしか書いていないのですが、その後にデバックできるかテストする必要があり、デバック出来ないので、このサンプルのどこかに間違いが存在しているのです。
最初に、どこかに間違いがないか、教科書をしらみつぶしに読み返しました。が、間違いは見つかりませんでした。よく考えればこの教科書には、VSからデバックして正常に実行されるかテストして下さい。と書いていないですし、教科書に正しい答えがない可能性も高いです。
次に、Packet Publish社が提供しているサンプルコードを見ました。そのサンプルコードの中の.uprojectはもとのままで、モジュールのつけ足した部分がないのです。で、.uprojectファイルのモジュールの部分を消してみると、デバックします。なんか間違っているような気がしますが、このまま、次のレシピ、ツールバーに新しいボタンを作成する。をやってみると、.dll ファイルが見つかりませんのメッセージが出ないまま、デバック出来ました。だたし、UE4エディターのツールバーに新しいボタンは出来ません。やっぱりこの方法も間違っているようです。
その次に、ネットでUE4におけるエディターモジュールの作り方を調べました。三つほど、そのものズバリのサイトが見つかりました。一つ目は、株式会社ヒストリアさんのブログで、[UE4] モジュールについてです。二つ目は、YouTubeのチュートリアルで、Unreal Engine 4 C++ Module Creation Basics Part 1です。最後は、UE4の公式サイトのCreating an Editor Moduleです。結論から言うと、ヒストリアさんのブログで全て解決しました。転んだ滑った経験を総て述べるのも、後で参考にするときに非常に有効ですが、正解に至るために、もうあまりに沢山の試行錯誤をしてしまい全部は覚えていないので、今回は正解だけ書きます。
ヒストリアさんのブログに以下のような記載があります。
つまり、Editor.Target.cs内のコードにこのモジュールをビルドしてくださいと指定しないと.dllファイルは作られないと。そんなの教科書のどこにも書いていないじゃないか。と流石にこの教科書に対して少し怒りを感じ始めましたが、まずは試して見ました。
でデバックモードで実行してみますと、UE4エディターがとうとう動きました。ヒストリアさんのブログに書かれた方法で使用されているモジュールをチェックすると、
しっかり出来ています。
<まとめ>
- Unreal Engine 4 Scripting with C++ 第8章 レシピ11 新たにエディターモジュールを作る、を勉強しました。
- 教科書では、ビルドする事でサンプルが正しく作成されたかチェックしてお終いですが、さらに、デバックモードで実行し、UE4エディターがきちんと起動する事を確認する必要があります。
- 教科書の方法では、エディターモジュールは生成されてなく、Target.cs内のコードにこのモジュールをビルドしてくださいと指定しなければなりません。
- 指定した後は、デバックモードで実行でき、生成されたUE4エディターから使用されているモジュールをチェックするとここで作成されたモジュールが確認出来ます。
- 株式会社ヒストリアさんのブログ、[UE4] モジュールについて、が問題を解決するのに非常に役にたちました。