プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

Unreal Engine 4 初心者による入門

※最終更新日:19/08/30

対象


 誰でも、ある程度3Dとかの知識あるとやりやすいかなってぐらい





目的


UE4初心者がUE4使いを増やす架け橋になればいいな。




 

構成


No.1 Epic Games Launcher
No.2 プラグインの設定
No.3 起動プレイ
No.4 快適設定
No.5 画面の移動
No.6 アクターの移動と複製とシャドウのビルド
No.7 アクターの作成
No.8 アクター間のやり取り
No.9 マテリアルの作成と適応(超適当)
No.10 UIの作成と適応(超適当)
No.11 サウンドの作成と適応(超超適当)
No.12 操作ボタンの設定(超超適当)
No.13 パッケージ化の設定(超超超適当)
No.14 Static Meshの作成







本編


 今回はUnreal Engine 4 の基本からパッケージまで説明します。





    No.1 Epic Games Launcher


Epic Games Launcherを起動するとこのような画面になると思います。

f:id:yutateno:20190830032127p:plain



 この画面からライブラリを開いて以下の画面に行ってください。

f:id:yutateno:20190830032215p:plain



 私はもうダウンロードしていますが、エンジンのダウンロードをしてください。
まず、「Engine バージョン」のプラスボタンをクリックしてバージョンを選択してください。Previewっていうのはバグを含んでいたりするので初心者のうちはやめといた方がいいです。

f:id:yutateno:20190830032229p:plain



 ダウンロードが終わったら「起動」をしてください。

f:id:yutateno:20190830032251p:plain



 パソコンのスペックにもよりますが、起動に時間がかかります。
起動したらこのようなウィンドウが出てくると思います。

f:id:yutateno:20190830032303p:plain



 そうしたら下の画像で示しているようにして「プロジェクトを作成」してください。
ここで注意してほしいのですが、フォルダの位置は「Documents→Unreal Projects」の下を選択した状態のままにしてください。こうしないとパッケージ化が出来ない場合があるためです。
プロジェクト名は何でもいいです。

f:id:yutateno:20190830032316p:plain



 これでプロジェクトの作成は終わりです。





    No.2 プラグインの設定


 プロジェクトを起動したらこの画面になると思います。

f:id:yutateno:20190830032343p:plain



 そうしたらまずプラグインの設定を行います。理由としては私みたいに困る人が出るためです。

f:id:yutateno:20190830032356p:plain



プラグインの設定を開くとこのような画面になると思います。

f:id:yutateno:20190830032411p:plain



 そしたら以下の画面のようにVRの設定のところに行って、有効のチェックを外してください。
このチェックが有効のままだとウィンドウのゲームなのにVR(Oculus Home等)が起動してしまい、利用者にとってわりと困るので外します。VRの開発の場合は有効のままで大丈夫です。
そうしたら再起動を促されるので再起動を行います。

f:id:yutateno:20190830032422p:plain



 これでプラグインの設定は終わりです。

 ちなみに私はこのプラグインを有効にします。
これはオブジェクトを粉々にしてくれるプラグインです。一つ設定を間違えるとすごい処理の重さになりますが、適度に使えば見た目が一気によくなるものです。

f:id:yutateno:20190830032443p:plain



 他にもいいプラグインは探せばたくさんあると思います。
まぁそこらへんは必要になったら調べる程度でいいと思います。





    No.3 起動プレイ


 せっかくここまでやったのでとりあえず起動して遊んでみます。
やり方は単純で、再生をクリックします。

f:id:yutateno:20190830032455p:plain



 画面のここをクリックしてください。そうしたら遊べます。
操作は基本的にWASDで移動。SPACEでジャンプ。マウスでカメラ移動。ESCで終了です。コントローラーにもすでに対応されてるはずです。

f:id:yutateno:20190830032507p:plain








    No.4 快適設定


 さて、今の時点で重いと感じた人がいるかもしれません。
そうでない人はNo.4を無視して大丈夫です。

 ここではエンジンの画質等を落として快適にします。
やり方は単純で、以下の画像のセッティングの項目からクオリティを下げます。

f:id:yutateno:20190830032519p:plain



その他にマテリアルの品質レベルを下げればある程度使えるものになると思います。
それでも厳しい場合は我慢するか諦めてください。





    No.5 画面の移動


GCCツールをよく扱う人にとっては感覚でわかると思いますが、画面内のエディタースクリーンを動かすには右クリックを押しながらWASDキーで移動です。
その状態でマウスホイールを動かせば移動の速度が調整できます。

f:id:yutateno:20190830032533p:plain








    No.6 オブジェクトの移動と複製とシャドウのビルド


 さて、エディター内のアクターを動かしたりしたいと思います。
というかまずアクターって何ぞやって思うかもしれませんが、いわゆるオブジェクトです。
人モデルであったり、動かない木であったり、UIであったり…それらすべてをアクターと呼びます。

まず、UE4のワールド座標系ですが、XYが平面座標で、Zが縦軸になっています。
試しにこの四角いオブジェクトを選択したら右下に座標系が出ます。

f:id:yutateno:20190830032546p:plain



 さて、エディター内のアクターを動かしたりしたいと思います。
やり方は二通りあって、右下の座標の数値を弄る方法と、エディター内の矢印を弄って動かす方法です。

f:id:yutateno:20190830032600p:plain



 そしたら次にアクターを複製したいと思います。
やり方は簡単で、Altキーを押しながら先ほどのアクターの矢印を動かすだけです。
この場合は緑色の矢印を動かして複製しました。

f:id:yutateno:20190830032613p:plain



また、この時に間違えて複製しすぎたとかあった場合はアクターを選択した状態でDelを押せば消せます。
その他の方法としてはCtrl+Zで戻せますし、逆に戻りすぎた場合はCtrl+Yで進めます。
ただCtrl+ZとCtrl+Yで気を付けてほしい点としては、この操作はエンジンで操作したこと一つ一つを対象とするのでエディター内以外での操作も元に戻ったりするのであまり気を付けないと大変なことになります。

 そうしたらこのアクターを別の角度から見ると分かると思いますが、シャドウが変な感じになっています。
また、エディターの左上にも赤字で何か言われています。

f:id:yutateno:20190830032626p:plain



 これを直すためにビルドを行います。
規模の大きいものだとこれに少し時間がかかります。

f:id:yutateno:20190830032650p:plain



 この表示が出れば完了です。

f:id:yutateno:20190830032828p:plain

 

f:id:yutateno:20190830032839p:plain








    No.7 アクターの作成


 凄く基本的なこととしてアクターを作成します。
青い部分のどこでもいいので右クリックをします。

f:id:yutateno:20190830032900p:plain



 そうしたらこのようなものが出てくると思うので、ブループリントクラスを選択します。

f:id:yutateno:20190830032913p:plain



 その次にActorを選択します。

f:id:yutateno:20190830032925p:plain



 とりあえずBP_TestActorという名前で保存してダブルクリックで開いてみましょう。

f:id:yutateno:20190830032939p:plain



f:id:yutateno:20190830032950p:plain



 そうしたらアクターにオブジェクトを持たせたいので左上のコンポーネントを追加からStatic Meshを選択します。

f:id:yutateno:20190830033005p:plain



 その次に追加したStatic MeshをクリックしたままスライドしてDefaultSceneRootの上にマウスを持っていきドラッグします。
この行為は正直なくてもいいのでよくわかんない人はほっといても良いです。

f:id:yutateno:20190830033018p:plain



 左上のStatic Meshを選択した状態で右側にあるStatic MeshからWall_Door_400x300を選択します。

f:id:yutateno:20190830033033p:plain



 これで最低限のアクター作成は完了です。
そしたらコンパイルを選択します。

f:id:yutateno:20190830033048p:plain



 そうしたらこれをエディター内に持っていきます。
最初のところに戻って、先ほど作ったBP_TestActorを選択したままスライドしてエディターに置きます。
これで追加は終わりです。

f:id:yutateno:20190830033101p:plain



 ですが、向いている方向があまりいいとは言えないので回転させます。
このアクターを選択した状態でEを押すと矢印から円の1/4に変わります。これで矢印と同じ感じに行えば回転します。
また、Rでサイズを変えれます。Wを押せば矢印に戻ります。

f:id:yutateno:20190830033115p:plain



 そして再生を押してみると分かりますが、最初からすでにあたり判定がしっかりしています。これがStatic_Meshのいいところでもあります。
ですが、ゲームによってはあたり判定をさせたくない場合などには先ほどのBP_TestActor内の右側の詳細からあたり判定を消したり特殊な感じにしたりなどで簡単にできます。

 このままでも一応良いのですが、先ほど作ったBP_TestActorのStatic_Meshはどう考えても動かないものです。
そういったものは、トランスフォームの可動性をスタティックにします。

f:id:yutateno:20190830033128p:plain



 それでゲームのエディター画面に戻るとまた赤字が出ているのでビルドを行います。

f:id:yutateno:20190830033140p:plain








    No.8 アクター間のやり取り


 では、まず、先ほど作ったBP_TestActorがどのアクターと接触したかを判断させたいと思います。
Static_Meshを選択した状態で右側の下の方にあるOn Component Hitを選択します。

f:id:yutateno:20190830033203p:plain



 そうしたらイベントグラフに移動してみると、On Component Hitがあると思います。
また、この画面について説明するとこれはよく聞くブループリントっていうものです。
右クリック長押しで画面操作できます。
最低限説明すると、BeginPlayが最初に一度だけ実行されるもので、Tickがマイループ実行されるものです。

f:id:yutateno:20190830033215p:plain



 では、このアクターに対して何が接触したかを出力するためにノードを作成します。
右向き三角形をクリックしたままスライドしてテーブルの上で離します。そうすると検索ウィンドウが出るのでprint stringと打ちます。

f:id:yutateno:20190830033227p:plain



 そうするとこのように出てくると思います。
この状態で試しに再生をクリックしてキャラクターをぶつけると左にHelloが沢山流れると思います。
これがPrint Stringの仕様です。

f:id:yutateno:20190830033238p:plain



 ですが、これでは何が接触したのかは分かりません。
そこでOn Component HitのOther Actorというボタンをクリックしてスライドして、Print StringのIn Stringに置きます。

f:id:yutateno:20190830033248p:plain



 これで再生してみるとキャラクターが接触したのだと分かります。

f:id:yutateno:20190830033258p:plain




 では、次にアクターの持つ変数を渡しあいたいと思います。これもアクター間のやり取りなのでここで行います。
 まず、これまでと同じようにアクターを作成します。今回は名前をBP_ConnetActorにします。

f:id:yutateno:20190830033312p:plain



 そしたらイベントグラフに移って、左側の変数のプラスボタンをクリックします。

f:id:yutateno:20190830033324p:plain



 そうすると勝手に何か変数が作られてると思います。
これをクリックしたまま右側で名前と型名を変えます。
今回はIntValueという名前にして、Integer型にします。また、インスタンス編集可能にもチェックを入れます。
そうしたら、コンパイルもします。

f:id:yutateno:20190830033334p:plain

 

f:id:yutateno:20190830033345p:plain



 そうしたらゲームエディターの方にこのBP_ConnectActorを配置します。どこでもいいです。
この時にアクターの配置調整が思った通りに行かないと思います。その時は以下の画像で青く囲った部分の数値を弄れば微調整が出来るようになります。

f:id:yutateno:20190830033356p:plain



 もっと細かく調整したいっていう場合には左上のパースペクティブからどれかを選択して調整することもできます。
床や壁の配置などには使われることがあったりします。

f:id:yutateno:20190830033408p:plain




 では、戻って、アクター間でやり取りをさせるためにゲームエディター内に配置したBP_ConnectActorを選択した状態で右側でtagを検索します。

f:id:yutateno:20190830033419p:plain



 そうしたらtagのプラスボタンを選択してConnectActorという名前で追加します。

f:id:yutateno:20190830033432p:plain



 そうしたら複製をして、二つ目の方のtagを消します。ゴミ箱をクリックすればできます。

f:id:yutateno:20190830033444p:plain

 

f:id:yutateno:20190830033456p:plain



 次に二つのBP_ConnectActorの変数に対して違う値を入れます。これは先ほどインスタンス編集可能にしたことによりゲームエディター上で弄れるようになっています。
アクターを選択した状態で右側に変数の値を入れれるようになっているので調整します。

f:id:yutateno:20190830033508p:plain

 

f:id:yutateno:20190830033522p:plain



 そうしたら下準備は終わりなので、BP_TestActorを開いてイベントグラフを表示させます。
説明と画像の用意が少し手間になるので多少端折ります。
まず、Begin Playからノードを引っ張ってGet All Actors Of Classを追加します。

f:id:yutateno:20190830033535p:plain



 Get All Actors Of Classのクラスを選択からBP_ConnectActorを選択します。

f:id:yutateno:20190830033546p:plain



 そしてGet All Actors Of ClassのOut Actorsから変数を作成します。名前をBP_ConnectActorArrayにします。

f:id:yutateno:20190830033559p:plain

 

f:id:yutateno:20190830033611p:plain



 これでBegin Playは終わりです。
 次にTickの方に移ります。
左の変数の項目にあるBP_ConnectActorArrayをクリックしてスライドしてエディターに置きます。そうしたらゲッターかセッターか聞かれるのでゲッターを選択します。

f:id:yutateno:20190830033645p:plain



 Arrayと書いてるある通り、配列なのでループをさせます。そのためにFor Each Loopを呼びます。

f:id:yutateno:20190830033656p:plain



 そしたらConnectActorというタグを持ったアクターがいるかどうかを調べるためにActor Has Tagというノードを呼び、さらにいるかどうかを調べるためにif文としての役割であるブランチを呼びます。

f:id:yutateno:20190830033704p:plain



 そしてBP_ConnectActorの変数のInt Valueを呼ぶためにFor Each LoopのArray Elementsから引っ張ってGet Int Valueを呼び出します。

f:id:yutateno:20190830033721p:plain



 そしたらちゃんと呼べているか確認するためにPrint Stringにつなげて再生してみます。
そうすると10という数字が左上に表示されるはずです。

f:id:yutateno:20190830033733p:plain



 ちなみにどういうノードをたどっているか視覚的に見ることもできます。

f:id:yutateno:20190830033745p:plain




 ちなみにtag分けしたBP_ConnectActor内で処理を分けることもできます。
ここまで来ればある程度分かると思うので画像だけ載せときます。

f:id:yutateno:20190830033756p:plain








    No.9 マテリアルの作成と適応(超適当)


 もうめんどくさくなってきたので適当で。
アクターの作成と同じ要領でマテリアルを作成。

f:id:yutateno:20190830033806p:plain



 適当にM_Testとする。そしたらダブルクリックで起動。

f:id:yutateno:20190830033818p:plain



 右にごちゃごちゃあるけど初心者的には基本的にエディター内で完結する感じでよい。

f:id:yutateno:20190830033828p:plain



 そしたら色の三原色のRGBの値を入れるノードが欲しいので作成する。やり方は簡単で、何もクリックしていない状態で3キーを押しながら左クリック。

f:id:yutateno:20190830033839p:plain



 そのノードをダブルクリックすればカラービッカーが出るので適当にやってベースカラーにつなげて、左上の適用をクリックすれば完成。

f:id:yutateno:20190830033850p:plain



 適当でもなんかいい感じのできる。

f:id:yutateno:20190830033900p:plain



 それをどれかにアクターに持たせたかったらこの画面でもできるし、マテリアルが一つしか持ってないアクターだったらゲームエディター画面にドラッグアンドドロップで出来る。

f:id:yutateno:20190830033912p:plain

 

 

f:id:yutateno:20190830033922p:plain



 ちなみに今更ではあるが、ノードの繋がっている棒を外すときはAltキーを押しながら左クリックで切れる。





    No.10 UIの作成と適応(超適当)


 UIはWidgetブループリントっていうのを使います。いつも通り右クリックで、まぁ以下の画像でも見てください。

f:id:yutateno:20190830033955p:plain



 起動するとこのような画面になっています。基本的に左の欄の一般から引っ張ってきます。

f:id:yutateno:20190830034004p:plain



 例えば、Textを引っ張ってきて、適当なところに配置して右側の欄で調整を行います。今回行ったのはこの部分だけ。

f:id:yutateno:20190830034013p:plain



 そしたらまず、3D空間上に置きたいのでBP_ConnectActorに持たせます。
これまでにやった感じでコンポーネントを追加からWidgetを追加して右の項目を調整します。
囲った部分が弄った部分です。ちなみにIs Two Sidedは裏も描画するかどうかということです。

f:id:yutateno:20190830034022p:plain

 

 

f:id:yutateno:20190830034034p:plain



 また、2DとしてUIみたくスクリーンに表示させたい場合は以下のようにします。
ちなみに今更ですが、UE4で正解の方法はありません。逆に不正解はあると思いますが。
私は今回レベルブループリントにて2DWidgetを表示させます。
まず、レベルブループリントを開きます。

f:id:yutateno:20190830034048p:plain



 そしたら以下のように作成してください。
レベルブループリント内には基本的に最初は何もないので全部作ります。

f:id:yutateno:20190830034057p:plain



 再生をしたらこのようになっていると思います。この2Dの座標は先ほど作ったWidget_Testの位置そのままです。

f:id:yutateno:20190830034108p:plain





※補足
先ほど当たり前のように話していたレベルブループリントについて少し説明すると。
この「レベル」というのはゲームでの「タイトル」「ゲーム部分」「ゲームオーバー」「ゲームクリア」などをレベルと称していいます。
なので上の例で言えば4つのレベルが存在していることになります。
C++で言えば、タイトルクラスが1つのレベル、ゲームクラスが1つのレベルっていう感じです。…伝われ
だからレベルブループリントを弄ればそのシーン全てに反映されるので基本的にはあまり弄らないです。





    No.11 サウンドの作成と適応(超適当)


サウンドは基本的にサウンドキューというのを使います。

f:id:yutateno:20190830034142p:plain



 起動したらこの画面なのです。

f:id:yutateno:20190830034151p:plain



 正直最初のうちは音素材をそのままつなげて終わりです。

f:id:yutateno:20190830034201p:plain








    No.12 操作ボタンの設定(超超適当)


 例えばうちの部活ではコントローラーはSTART+BACKでキーボードはESCで終了ですが、それをUE4では一つにまとめられます。
その方法として、まず、プロジェクト設定を開いて。

f:id:yutateno:20190830034212p:plain



 その中にインプットにあるAction Mappingsにて行えます。終わり。えっ

f:id:yutateno:20190830034221p:plain








    No.13 パッケージ化の設定(超超超適当)


 パッケージ化の設定はこのようにしろっていうだけなので画像のみにします。

f:id:yutateno:20190830034233p:plain



 パッケージ化といってますが、要はリリースです。リリースしたファイルの構成は基本的にこうなっています。
遊ぶ人が触る部分はこの.exeのみが渡す必要のあるファイルは全部です。

f:id:yutateno:20190830034243p:plain








    No.14 Static Meshの作成


 これまでに何度か使用してきたStatic Meshを自作するためのやり方をやります。
正直めんどくさいので見栄えなどは何も考えずとても単純なやり方を説明します。

 このスタティックメッシュを作成する目的として、いくつかありますがそれについては後程説明します。

 まず、Static Meshを作るためのアクターとしてジオメトリからボックスを取ってきます。
今回は二つ使ったものにします。

f:id:yutateno:20190830034300p:plain



 そしたら、片方のボックスのBrush TypeをSubtractiveにします。

f:id:yutateno:20190830034310p:plain



 試しにこのSubtractiveにした方をしていないボックスに重ねるとその部分が消えるようになると思います。

f:id:yutateno:20190830034319p:plain



 では、先ほど配置した二つのボックスを両方選択した状態にします。片方を選択した状態でCtrlを押しながらもう片方を押せば出来ます。
Subtractiveにした方はゲームエディターの方で選択しにくいようになってしまうと思います。そういった場合は右上のアウトライナから選択します。

f:id:yutateno:20190830034330p:plain



 そうしたら、Static Mesh化します。Brush Settingsの詳細設定を表示させて、スタティックメッシュを作成をクリックします。

f:id:yutateno:20190830034339p:plain



f:id:yutateno:20190830034349p:plain



 そしたら、小さなウィンドウが出ると思います。そこで作成したスタティックメッシュの場所を指定します。
ですが、せっかくなので自分用のフォルダを作成してそこに入れたいと思います。
右クリックで「新規フォルダ」を選択して、適当な名前で作成し、そこを選択した状態で「スタティックメッシュを作成」を選択します。

f:id:yutateno:20190830034400p:plain



f:id:yutateno:20190830034410p:plain



 これでスタティックメッシュの作成自体は完了です。ですが、これだけではちゃんとしたものではないので必要最低限の設定としてコリジョンを設定します。
ですが、この時点で右上のアウトライナを再確認していただければわかりますが、先ほどのボックスが一つのスタティックメッシュとされています。
一応ゲームエディター内に存在しているので再生を押して当たりに行ってみましょう。すり抜けますけどね。

f:id:yutateno:20190830034420p:plain



f:id:yutateno:20190830034432p:plain



 では、先ほど作ったフォルダの中にあるスタティックメッシュをダブルクリックして開いてみましょう。

f:id:yutateno:20190830034446p:plain



 そしたらこのような画面が出てくると思います。その中の上にコリジョンを開いてオートコンベックスコリジョンを選択します。
人によってはコリジョンを一つ一つの調整をするかもしれませんが、私たちは所詮初心者なのでとりあえずオートコンベックスで行います。

f:id:yutateno:20190830034458p:plain



 もう出ている人もいるかもしれませんが、右下に凸型分解というのが出てきます。
ここでコリジョンの細かさを設定できますがこの程度ならこのままでいいので「適用」をクリックします。
ちなみに細かくすれば細かくするほどあたり判定が発生した際に処理が重くなるので注意が必要です。

そうしたら緑色の線が出ると思います。これで終了です。

f:id:yutateno:20190830034509p:plain



 ゲームエディターの方に戻って再生をしてみましょう。あたり判定が発生しているはずです。
ですが、細かく微調整をしていないので所々いびつだと思います。まぁそれは独自で。

f:id:yutateno:20190830034519p:plain



 ちなみに先ほどのスタティックメッシュの画面でマテリアルの設定もできます。

f:id:yutateno:20190830034530p:plain



 ここまでの一連のことは、サンプルにないがこういった形状のアクターが欲しいといった場合に作ります。
特に私みたいなモデルを作成することが出来ない人にとって大変助かります。
フリーのものを探すのも良いですが、こちらの方が権利関係上もしかしたらといったことがなく、安全なので安心です。


 また、もう一つの目的としてモデルを作成する人に細かい指定ができるという点です。
例えば、ゲームを作っていて、急にとあるモデルが欲しくなったとします。図で説明するのも難しいし、大きさの数値を指定するのも面倒だし、言葉で説明するにも難しい。
そういった場合にこのエディター上で作成して、それを出力してモデルの人に渡す方法というのがあります。

 先ほど作ったスタティックメッシュをゲームエディター上で選択した状態で、「ファイル」から「選択されたものをエクスポート」をクリックして出力します。

f:id:yutateno:20190830034541p:plain



その際に出力するモデル形式などを選びますが、それはモデルを作成する人に合わせるようにしてください。
あとはこれを渡せば煩わしいのは無く「見ろ!」で終わります。





こっからは聞いても聞かなくてもいい話ですが、UE4の練習的な感じで株式会社ヒス〇リア主催のコンテストがたびたびやってます。
http://historia.co.jp/ue4petitcon/
一回しか出してませんが、シャツとかバインダーノートとかよくわかんない奴とか貰えるので出してみたらどでしょ。

あとはっきり言って以下のURLで学んだ方が断然いい。
https://www.udemy.com/unreal-engine-4-beginner-tutorial/