UE4の勉強記録

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

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

<前文>

f:id:kazuhironagai77:20180527131504p:plain

で勉強しています。

今回から、9章の勉強に入ります。8章は長く大変でした。8章までは教科書のサンプルコードとPucketPublish社が提供するサンプルコードから全てのレシピを再現出来たのですが8章で初めてその二つからでは再現できないレシピがありました。さらに勉強内容をブログにまとめる事を始めたので文章を書くと言う別な大変さを味わう事にもなりました。正直、8章が終わったらブログも終了しようかと考えていたのですがやっぱり最後まで続ける事にしました。今回は9章の最初なので9章が何を勉強するのかを簡単にまとめたいと思います。ですが、これからこの教科書の勉強内容を最後までブログにまとめると決めたので何故UE4C++を学ぶ必要があるかを最初に述べたいと思います。

<本文>

UE4C++を学ぶ意義>

UE4の使い方を勉強するほとんどの人の目的はゲームを作成する事だと思いますが、それ以外が目的でUE4の使い方を学ぶ人たちもいます。ゲームを作る事が目的な人に限って考えてもUE4の勉強をする人の経歴は非常にバラエティーに富んでいます。大雑把に分けても3つのタイプがあると思います。まずデザイナーを代表とするアート関連の人、次にゲームが趣味で自分でゲームを作りたい人、最後にプログラマーでゲーム制作を学びたい人です。この全然経歴が違う人たちが同じ教材で同じ環境で勉強する事が可能なのかどうかがまず疑問ですがほとんどのUE4の教材はそれを意図的に無視して書かれています。明白な事ですがこの経歴の違う人たちの中で最も速くかつ深く使い方を覚えられるのがプログラマーです。プログラマーでゲーム制作を学びたい人なら3Dグラフィックの基礎をOpenGLDirectXで学んでいるはずです。疑問に思った箇所を英語の資料から直接理解する事もほとんどのプログラマーは可能でしょう。またゲームの製作に必要な数学(線形代数偏微分方程式など)を理解出来る数学の基礎がある人も多いはずです。しかしほとんどの巷に溢れているUE4の教科書はこれらのプログラマーのみを対象にした本ではありません。むしろプログラミングをまったく知らなくでもゲームが作れると言った明らかにプログラマー以外の人を対象にした本が多く見受けられます。何故なんでしょうか?更にそれらの本はUE4におけるC++ の使い方について何も説明していません。ではUE4C++を勉強する必要はないのでしょうか?

これはUE4の勉強をする人の経歴と目的によると思います。デザイナーを代表とするアート関連の人やゲームが趣味で自分でゲームを作りたい人がUE4C++を勉強する必要はないと思います。しかしプログラマーUE4の使い方を学ぶ場合はUE4C++を勉強する必要はあると私は思います。プログラマーUE4C++ を勉強するに当たって私は以下に示す事が重要だと考えています。

  • ブループリントで出来る事をC++で行う。
  • ブループリントの機能を拡張する。
  • ブループリントで出来ない事をC++で行う。
  • UE4エディターを拡張する。
  • UE4エディターそのものの改良を行う。
  • ゲームエンジンの作成方法をUE4ソースコードから学ぶ。

簡単に解説すると「ブループリントで出来る事をC++で行う。」は、C++で行う事で処理速度が確実に速くなります。Blueprint vs C++ Performanceに詳しい説明があります。「ブループリントの機能を拡張する。」はレベルブループリント上で使える独自のノードの作成や8章で行ったようなアセットタイプの自作などが入ります。「ブループリントで出来ない事をC++で行う。」はちょっと具体的な例が出てこないですが例えばtry&catchなどはどうでしょうか?確かブループリントと同じビジュアルプログラミングを採用しているLab viewでtry&catchは出来ないと聞いた事があります。このような事を行うためにはC++を使用する必要があります。「UE4エディターの機能の拡張を行う。」は8章で行ったようなツールバーに新しい要素を追加する事やプラグインの作成が当たります。「UE4エディターそのものの改良を行う。」はUE4エディターのソースコードそのものを改造する場合です。この場合はソースコードをダウンロードして自分でビルトする必要があります。最後の「ゲームエンジンの作成方法をUE4ソースコードから学ぶ。」ですがこれは私の願望です。ゲームエンジンってどのように作成するのか全然分からないです。ゲームエンジンの作成そのものも勉強出来たらいいなと思っています。

<なぜこの本で勉強するのか?>

では、UE4C++を具体的にどのように勉強したらいいのでしょうか?ここで多くのUE4の学習者が躓いてしまいます。これで勉強すべきと言う教科書やチュートリアルがないからです。私は結局この教科書(unreal engine 4 Scripting with C++)に決めましたが、この教科書が一番いい訳ではありません。ただ他の教科書やチュートリアルよりはいいと思っています。その理由の一つがアプリ完成型チュートリアルではないからです。

ここで、私がいうアプリ完成型チュートリアルとは特にインターネットに溢れているチュートリアルで、最初から最後までチュートリアルの指示通りに行うと何かのアプリ(UE4の場合はゲーム)が完成するタイプのものです。このタイプのチュートリアルにも長所がないわけではないですがプログラミングの基礎を学ぶ場合はこのタイプのチュートリアルは完全な手抜きです。これには個人的ながら貴重な経験があります。化学を専攻していた先輩がプログラミングの勉強がしたくて夏休み中にYouTubeチュートリアルで独学でC#を勉強したのですが、その時、勉強の成果として完成した計算機のアプリを見せてくれました。しかしその先輩アプリは完成したけど全然意味が分からないとつぶやいていました。そこで私がその先輩に変数とは何ですか?オブジェクトとは何ですか?クラスとは…とプログラムの基本的な事を矢継ぎ早に質問するとその先輩ははっきりと私にこう言いました。「そんなものは聞いたこともない。全部初めて聞いた。」と。

誤解がないようにはっきり書いておきますがアプリ完成型チュートリアルも中には優れた教材もあります。しかし前述したような基礎を全く教えずに「AしてBして…最後にZするとアプリが完成します。」という形式のチュートリアルが作れる事も事実です。そしてその場合全くプログラムの基礎を理解しなくてもアプリが完成してしまいます。インターネット上のUE4C++チュートリアルで少なくとも私が確認した全てのチュートリアルがアプリ完成型チュートリアルである事は、教える側もUE4C++の基礎が何かなのかが理解していないのではないかと言う危惧を私に感じさせます。

何事にも基礎はあります。それはUE4C++にもあるはずです。プログラマーUE4C++を勉強する場合でも最初に理解すべきは基礎の部分なのです。ですがUE4C++を勉強する場合何が基礎なのかが不明なのです。この教科書(unreal engine 4 Scripting with C++)は少なくとも著者が考えるUE4C++を勉強するための基礎の部分が書かれています。よって他のチュートリアルよりましと考えられます。

次にこの教科書(unreal engine 4 Scripting with C++)は読者がC++を理解している前提で書かれています。つまりプログラマー向けに書かれています。大変驚く事なのですが、C++どころかプログラミングを全く知らない人を対象にUE4C++を教えるチュートリアルが存在しています。C++は簡単な言語ではありませんし最初に学ぶプログラミング言語としてはかなり敷居が高い言語でしょう。それをC++を普段使用しているプログラマーでも難しい部類に入るUE4C++C++を学びながら勉強出来ると言うのです。それが本当なら大変優れたチュートリアルだと思いますが、実際はアプリ完成型チュートリアルで、AしてBしてCして…Zしてアプリ完成で終わりだと思います。

更に、この本に書かれたレシピはほとんどすべて再現可能です。教科書の中にはレシピで紹介されているのに再現出来ないコードが沢山あるものがありますが、私が勉強した限りこの教科書(unreal engine 4 Scripting with C++)にはほとんど再現出来ないレシピはありません。中には教科書の例だけでは不明でPucketPublish社のサンプルコードを参考にする必要があるものもありますがそれでも何とかレシピは再現出来ます。PucketPublish社のサンプルコードについて私見を述べると、教科書(unreal engine 4 Scripting with C++)の著者が書いたものではありません。著者なら自明な事を推測して想像で補っている箇所が沢山あります。ここで私が不思議に思うのが出版社の社員なら直接著者に聞いたらいいと思うのですがその形跡が全くない事です。出版社と著者の力関係なら、出版社の関係者が著者に質問出来ない事はないはずです。そこで私が推測したのが、「この本の著者が大学教授でこのサンプルコードを作成したのはその教授の下で働いている大学院生ではないのか?」です。

アマゾンでの評価、評判も大切です。単純な★の数だけでなくこの本の学習者のコメントを全部読んで読者が公平に評価しているのか?公平に評価した上で長所、短所を述べているかです。

f:id:kazuhironagai77:20180527132031p:plain

最も評価を得ている批評は★2つでした。以下にその批評の一部を示します。

f:id:kazuhironagai77:20180527132058p:plain

載っているコードが全く動かなくどのように直したらいいかも簡単には分からないと述べています。大変具体的な例を述べているので、読者には参考にはなります。ただ私が覚えている限りでは8章を始めるまでコードが動かなくて詰まった記憶はないのですが?ひょっとしたらこの読者が批評した2016年から修正が入っているのかもしれません。この批評を書いた人(おそらく中国人)は、大変怒っていますが最後までやると宣言していますので、この人が修正したこの本の間違いを2018年度には直したのかもしれません。それで、ピンと来たのですが、PacketPublish社のサンプルコードがこの本の著者と相談した形跡が全然ないので不思議だったんですが、この人が全部直してコードをPacketPublish社に寄贈したのかもしれません。もしそうだとしたらこの人、この教科書(unreal engine 4 Scripting with C++)の質を上げるのに大変な貢献をした事になりますね。

f:id:kazuhironagai77:20180527132126p:plain

次の批評は2行しか書いていません。このレベルの教科書の批評を少しでもこの教科書で勉強したならば2行で述べる事は出来ないはずです。もし出来るのならばこの教科書レベルの内容を総て理解している人だけです。そんな人があえてこの本を買うのか甚だ疑問ですが読んでみましょう。ネットワークとマルチプレイについて書いていないので駄目と言っています。この場合のfineの意味は正確には分かりませんが細かいと言う意味より十分であると感じます。つまりネットワークとマルチプレイについて書いていないので不十分な教科書だろと言っています。更に順番がおかしいと言っています。これは私もこの本で勉強してしばしば感じました。前章で詳しく勉強した内容を読者が知らないと仮定して説明したり、後の章で説明する内容を読者が知っていると仮定して説明したりしている箇所が結構ありました。更に基礎については十分に説明しているがUE4C++について全く知らない人がこの本で勉強するには少しきついかも。と述べています。

読んでみれば中々公平な評価です。ネットワークとマルチプレイについては基礎の分野に入るかどうかは疑問です。ネットワークとマルチプレイについては今の流行りのゲームには必要な事なので勉強しておくとゲーム会社の就職に有利なのかもしれません。

f:id:kazuhironagai77:20180527132155p:plain

問題がないわけではないですが、UE4C++の分野の本が全くないので評価する。とあります。やっぱりUE4C++の分野の本は全くないのですね。ネットでは質はともかくUE4C++の分野のチュートリアルは、少しはありますが本になると敷居が高いのかもしれません。

f:id:kazuhironagai77:20180527132218p:plain

最後の批評は、評価を変えたとありました。読んだのですがあまり参考になりませんでした。

これらの批評を読んだ結果、★3.2の評価はかなり妥当と思います。本来この程度の評価の教科書では私は買いませんが、UE4C++に関して基礎を説明している本がこれしか見つからないので仕方がありません。

  • 基礎を教える。どれが基礎か?などの基礎力について十分に考慮されているのか?
  • プログラマー向けに書かれているのか?
  • サンプルの再現性があるのか?
  • アマゾンなどの他の読者の評価はどうなのか?

を評価基準にしてこの教科書(unreal engine 4 Scripting with C++)は一応、及第点に達しているとしてこの教科書を選択しました。

 

<第9章>

今回は、9章の最初なので、9章が何を勉強するのかを、簡単にまとめます。教科書によると9章では以下の事を勉強するようです。

  1. キャンバスを使用して描く
  2. Slateウィジェットをスクリーンに加える
  3. UIのためのsize-awareなスケーリングのスクリーンの作成
  4. ゲーム中におけるUMG要素のシートの表示と非表示
  5. Slateイベントに関数の呼び出しをつける
  6. Unreal モーショングラフィックにデータをバインドする
  7. スタイルのウィジェットの外見をコントロールする
  8. カスタムなSWidget/UWidgetを作成する

簡単に解説します。1.の「キャンパスを利用して描く」は分かり易いですね。C++のライブラリーに限らず2次元のイメージを扱うライブラリーは大抵キャンバスクラスがあり、それを使ってイメージを表示します。この場合のキャンバスもunreal のライブラリーに多分存在するキャンバスクラスを使用してイメージを描くのでしょう。2.の「Slateウィジェットをスクリーンに加える」は、UE4のエディターにSlateウィジェットを加えるのでしょうか?ゲームのプレイ画面に加えるのではUMGを使用した方が簡単かつ複雑なデザインが作成できると思われますがどうなんでしょうか。3.の「UIのためのsize-awareなスケーリングのスクリーンの作成」はサイズをコントロール出来るスクリーンの作成という意味でしょうか?4.の「ゲーム中におけるUMG要素のシートの表示と非表示」はブループリントでも出来るはずですが、C++でのやり方も知るべきという内容でしょうね。5.「Slateイベントに関数の呼び出しをつける」は言っている事は分かりますがそれが出来ると何が重要なのかが不明です。6.「Unreal モーショングラフィックにデータをバインドする」はモーショングラフィックとUE4C++の関係についてですね。私はUnrealの モーショングラフィック自体があまり詳しくないのでこの節は沢山勉強する必要があると思います。7.「スタイルのウィジェットの外見をコントロールする」はウィジェットの外見に関わる何かをC++側からコントロールするのでしょう。最後の8.「カスタムなSWidget/UWidgetを作成する」は文字通り独自のSWidget/UWidgetの作成方法を勉強する事でしょう。

全体の量は8章と比べると大分少ないです。それではガシガシやって行きましょう。

<イントロダクションの要約>

  • ゲームのプレイ中にプレイヤーに対してフィードバックを表示する事は最も大切な事の一つです。そしてこれはHUDの一種もしくはメニューを使用します。
  • 前のバーションのunreal engineでは簡単なHUDのサポートがありました。それは簡単な形状を描いたりテキストをスクリーンに表示したり出来ましたが芸術的に価値あるレベルのデザインを作れる精度ではありませんでした。
  • その為、scaleformが使用されましたがその使用には別途お金がかかりました。
  • Epicはscaleformを使用しないでも芸術的に価値あるレベルのHUDやメニューが作成出来るようにUE4ではSlateを開発しました。
  • UMG(Unreal Motion Graphics)を使用する事で、デザイナーがslate用のプログラミングを習う事なくslateを使用可能にしました。

UMGはSlateとは別なものではなくSlateをプログラミングしないで使用出来るものだったのですね。勉強になりました。