UE4の勉強記録

UE4の勉強の記録です。個人用です。

Unreal Engine 4 Scripting with C++ Cookを勉強して

<前文>

f:id:kazuhironagai77:20190324210258p:plain

先週、やっと全部のレシピを勉強し終えました。勉強した感想を簡潔に述べればこの教科書は素晴らしいです。UE4C++を勉強しようと思う人は必ずこの教科書で勉強すべきだと思います。しかしこの教科書は完璧ではないです。むしろ完璧からはかなり遠い部分が沢山あります。それについて詳しく語りたいと思います。

<総括>

<総論>

<初心者向けか?>

初心者向けだと思います。UE4C++を全く知らなくても勉強出来ると思いました。YouTubeによくあるHow To物でないのが良いと思います。UE4C++の教科書はこの本とこの本の作者が書いた続編?ぐらいしかhow to 物でない教科書は見つかりませんでした。これは大変不思議な事だと思います。普通のプログラマーなら新しいプログラミング言語を勉強する時「計算機を作って見ましょう。」と言う講座は絶対見ません。変数、タイプ、クラス、オブジェクト、関数、メソッドなどの作成方法の説明が書かれた教科書から勉強します。そういう意味でしっかりした教科書であると言えます。ただし教科書に書かれているように全くC++を知らない人はこの教科書の対象外です。更に言えばUE4BPの基本はこの本で勉強を始める前に知っているべきと思います。

サンプルコードがついていますのでそれを参考に勉強する必要があります。ただしこのサンプルコード私が試した限りでは動きませんでした。

<勉強する価値があるのか?>

この本で紹介されている内容はUE4C++の基本だと思います。ので勉強しないといけないレベルと思われます。ただしこの本の説明はベストではないですし個々の内容においてはもっと分かり易いチュートリアルがある場合が多かったです。この本はレシピ集です。料理のレシピ集で料理を勉強しているうちに料理のコツを掴んで自分で料理出来る様になるのと同じように、この教科書で勉強しているうちにUE4C++のコツのような物が理解出来るようになると考えると分かり易いと思います。

<本を買う価値があるか?>

勿論あります。私はキンドル版と紙の両方買いましたがキンドル版の方が検索が出来て使い易いです。

勉強するのにどのくらいの時間が必要か?

最初の予定では4か月で終わらせるはずでしたが、結局1年以上かかってしまいました。その理由はこの本のレシピの説明が不十分な個所が沢山あるからです。その不十分な個所をブログかYouTubeにまとめて(私は作る予定はありませんが。)それを参考にすれば4カ月で終わらせる事は可能と思われます。しかし長く時間をかけて一個一個問題を解決するのも思ったより勉強になりました。ので勉強方法によると考えられます。この本だけ勉強している訳にはいかないがこの本の内容も知っておきたい人は4カ月、じっくりUE4C++の基礎をこの本で身に着けたい人は1年、勉強する事になると思われます。

<この教科書で何が学べるのか?>

目次を見れば何が学べるかは一目瞭然ですが具体的な内容は各論で説明したいと思います。しかし動かないコードを何とか動かそうと勉強する時が一番UE4C++について学べたと思います。

<公式のチュートリアルと比べてもこちらで勉強した方がいいのか?>

公式が何を指すのかに寄りますが、以下に示したProgrammer Quick Startと仮定して話を進めます。

f:id:kazuhironagai77:20190331203435p:plain

こっちのページは参考資料的に使用していたのですがここで勉強する方法もありかなと思っています。両方やって合う方を続けるのも手だと思います。

<この教科書で勉強すれば十分か?>

足りないと思います。具体的に足りないと思う部分は各論で述べますが「これが書いていないのかよ。」と思う事は勉強中沢山ありました。しかし現状UE4C++の教科書でこれ以上詳しく書かれた本がないのでどうしてもこの本が基準に成ってしまいます。

<各論>

<第1章 UE4 開発ツール>

読んでいません。元々、最初の予定では4カ月で終わらせる予定だったので。この教科書に限らずUE4の教科書全般に言える事なんですがvisual studioを使った事がない人がUE4C++の勉強が可能な訳ないのにvisual studioのインストール方法から説明しています。何なんでしょうか?しかも前文には「この教科書で勉強するためにはC++を知っている事が前提条件です。」としっかり書かれています。一貫性もありません。ここだけ読むと大変駄目な本でここから判断してこの本で勉強するのを止める人は多いと思います。私も最初にこの本を購入した時はvisual studioのインストール方法を説明しているのを見て読むのを止めてしまいました。

しかしすぐその後で一般的なプログラミングの教科書で最初に習うprint関数とUE4C++上で同様の機能を持つUE_LOGの使用方法の説明が始まりこの教科書がまさしく私が求めていてた単なるhow to 物の教科書ではない事を証明してくれています。UE_LOGの使用方法そのものについては公式のサイトの方が遥かに詳しく解説されていますがこの本の内容も十分な説明がなされています。

<第2章 クラスの作成>

この章は勉強したはずですがブログの作成をする前であまり記録に残していないのでその当時の感想は覚えていません。何でUClassの作成を最初に教えるのか?actorクラスの作成を最初にすべきじゃね?と思った事ぐらいしか覚えていません。今見直すと相当大切なUE4C++の基本中の基本を書いているのが分かりますが当時はactorクラスについて勉強したいと思って第4章にすぐ移ってしまいました。

今見直すと相当大切な内容ばかりです。しっかり勉強すれば良かったです。

一つだけ気になる点はオブジェクトの初期化方法についてです。この章ではCreateDefaultSubobject関数を使用しないでConstructObject 関数もしくは NewObject関数を使用してます。つまりCreateDefaultSubobject関数を教える前にConstructObject 関数並びにNewObject関数を教えています。ほとんどのUE4C++を勉強した人が最初に習う関数がCreateDefaultSubobject関数と思います。敢えてCreateDefaultSubobject関数を教えないでConstructObject 関数もしくは NewObject関数を教える事の是非はこの章をしっかり勉強しなかった私には判断は出来ませんが、この教科書の大きな特徴だと思います。

<第3章 メモリーの管理とスマートポインター

この章もスキップしてしまいました。「何で今更C++の勉強をしなければいけないの?」と思いまして。後から考えてみると当時の私はスマートポインターについて完全に理解してはいませんでしたが、この章の最初のレシピがmalloc()だったので、はあ!勉強する必要なし!と結論づけスキップしていまいました。

大学で量子化学を勉強した時の話ですが各章の最初にその章で使用する数学の復習を行いました。それから量子化学を勉強したので数学で詰まる事はありませんでした。この手法は生徒の理解力を上げる画期的な方法として評価されていましたが同様の事がUE4C++でも出来ると思われます。CreateDefaultSubobject関数を教える直前にテンプレートやスマートポインターの復習を行えばCreateDefaultSubobject関数の理解も簡単になるしテンプレートやスマートポインターそのものも更に深く理解出来るようになると思います。この章のように一章まるまる使ってC++の説明をするよりも各章の最初にその章で新しく習うUE4C++の関数を理解するために必要なC++の知識を復習した方が理解しやすいと思いました。

<第4章 アクターとコンポーネント

ここからかなり真剣に勉強を開始したのですが流石に1年以上前となると何を勉強したのか全く覚えていません。更にこの章を勉強した時はまだサンプルコードがある事も知りませんでした。そういうのを踏まえた上での発言ですがまずここからブログを開始する8章までレシピが再現出来なかった記憶はありません。普通に再現出来たはずです。この章の内容については今見直した限りではこれだけでも買う価値ありとしか言いようがありません。素晴らしいです。正直もう一度勉強したいです。

<第5章 イベントの扱いとデリゲート>

この章もかなり素晴らしい内容でした。今内容はほとんど覚えていませんがこの章を勉強した時すごい楽しかった事は覚えています。これがUE4C++なのかと感心したのとそれを私が完全に理解してレシピを再現出来たので感動した事は覚えています。

ただし改善要求はあります。

  • C++プログラマーでイベントとデリゲートを使用する機会があまりない人達のためにC++における一般的なイベントとデリゲートの使用方法の例を復習してからUE4C++におけるイベントとデリゲートについて説明してほしかったです。つまり実際のゲーム作成でイベントとデリゲートをUE4C++で作成しなければならない箇所の説明があったら更に実践的な知識になったと思います。一般的なC++のプログラミングでイベントとデリゲートを使用する時は、キーを押したとか、マウスをクリックした時以外はあまりないと思います。その辺から話を拡張させてUE4C++におけるイベントとデリゲートに繋げてくれるともっと広い意味で使用方法について理解出来たのかなと思いました。

<第6章 インプットと衝突>

5章でインプットとイベントとデリゲートの関係についてもっと説明してほしいと思っていたら6章がまるまるインプットについてでした。ですがこの章についてあんまり記憶が残っていません。

<第7章 クラスとインターフェイスのコミュニケーション>

全く何を勉強したのか覚えていません。今ざっと読んでみるとRobert Nystrom著のGame Programming Patternにis-a とhas-aとゲームデザインの話が載っていますがそのUE4における具体的な対応策としてUInterfaceを使用する話のようです。しかしこの7章を勉強した時にGame Programming Patternを既に読んでいたのかどうかすら覚えていません。一応レシピは全部再現出来たと思います。

<第8章 C++UE4エディターの統合>

ここからブログを書き始めていました。だだし最初はブログを書く事自体が大変でブログそのものが主流になってしまいました。

ブロクを見直してみるとほとんどのレシピが再現出来ている事が確認出来ます。

f:id:kazuhironagai77:20190331203641p:plain

しかし最初のモジュールを作成する時にProjectName.Target.csにモジュール名を追加しないといけない事が書かれていませんでした。これを発見するまでに2週間以上苦しみました。ここは教科書に書いていないと学習者は永遠に分からない部分だと思います!更にこの部分についての説明も必要でしょう。

ここはこの本で勉強している人たちが諦める大きな落とし穴になっています。しかもその次のレシピはProjectName.Build.csの方に使用するモジュール名を追加しないといけないと言う事も書いていません。この二つが教科書の前で既に書かれていたならまだ救いがあったのですが、全くその事に触れた文章はありませんでした。しかもネットにある同じような内容のチュートリアルは全部この部分について説明されていました。

はっきり言ってここで挫折して止める学習者は多いと思います。ここまで大変良い教科書だったのですがこの2つのレシピのせいで難易度がいきなりマックスまで上がって無理ゲー化してしまいました。更にProjectName.Target.csとProjectName.Build.csについての解説を省いてしまうと言うUE4C++の教科書としては致命的とも言えるミスを犯してしまっています。

<第9章 ユーザーインターフェイス―UIとUMG

この章は、UMGの元になっているSlatモジュールの使用方法を学ぶ所です。勉強する上において特に大きな問題はなかったと記憶しています。ただ12章の最後のレシピが再現出来なかった理由がこの章の内容を忘れているからかもしれません。

ブログを読み直していたら以下の文章に当たりました。何故UE4C++について学ぶ必要があるのかに対する私の解答ですがこんな素晴らしい事を書いていました。すっかり忘れていました。やはり記録に残すのは大事です。

f:id:kazuhironagai77:20190331203712p:plain

この章のレシピの再現性をブログから抜き出した表を以下に示します。

f:id:kazuhironagai77:20190331203731p:plain

教科書通りに行って出来なかったレシピは一つだけでありました。

UE4C++の初心者向けの教科書でSlateの勉強をする必要がどこまであるのかは分かりませんが、この章のレシピはすべて再現可能で、UE4C++の初心者でも十分理解出来る内容でした。

<第10章 NPCをコントロールするためのAI

この章と次の章はUE4C++ではありません。C++を全く使用しません。1章から9章までの作者と同じ人が書いたとは思えないくらい内容に違いがあります。はっきり言って読むだけ無駄です。UE4のBPを勉強するならもっといい本はいくらでもあります。そちらで勉強すべきです。

<第11章 マテリアルのカスタム化とシェーダー>

この章もUE4C++ではありません。C++を全く使用しません。大変むごい内容です。私は大学で3Dグラフィックの研究が専門だったので非常にこの章を楽しみにしていましたがUEC++に関する説明は全くありません。この章を読んだときは怒りまくりました。

<第12章 UE4 APIを使用して>

この章の解釈は色々あると思いますが、解説も前の章ほど親切ではないですし、サンプルコードとにらめっこしながらレシピを再現する必要もあります。レシピのいくつかは再現出来ませんでした。それが作者の狙いなのかは分かりませんが今まで勉強して来たUE4C++の知識を総動員する必要もあるようです。

f:id:kazuhironagai77:20190331203807p:plain

Landscape API –パーリンノイズを使用してのランドスケープの生成は教科書のやり方では出来なかったです。ただし少し改造したら出来ました。GameplayAbilities APIについては他のチュートリアルで勉強した方が簡単に理解出来るような気がします。そして最期のレシピ「HTTP APIプログレスバー」が出来ませんでした。このブログの最初のレシピである8章の「プロパティに反応するーエディターからイベントを変える。」と最後のレシピである「HTTP APIプログレスバー」が出来なかったのが何か因縁を感じます。

12章は食べ応えがあると言うか兎に角ボリュームがすごかったです。勉強していても凄い楽しかったです。