【Unreal Engine 4 入門】 初心者向け解説の要点まとめ

2021-01-11

公式動画の猫でも分かるシリーズ「#2 Blueprintをさわってみよう」の要点をまとめる。

ue4_neko2

目次

概要

次の動画から読み取れる「要点」をまとめる。

『猫でも分かる UE4を使ったゲーム開発 超初級編 #2:Blueprintをさわってみよう

前提条件

  • #1を見ている
  • テンプレートから「サードパーソン」のプロジェクトが作成されている

作成されていれば中身はなにもいじってなくてOK

ブループリントとは

ビジュアルスクリプティングシステム。

「ノード」と呼ばれる箱をつなげるだけで視覚的にプログラムが作ることが可能

つまり「プログラミング言語がかけなくてもプログラムが作れる」

ブループリントを見てみる

image-20210106141241624

左下のコンテンツブラウザからThirdPersonCharacterをダブルクリックで開く

image-20210106141816399

ビューポートが開きキャラクターが表示されている。

※ビューポートが消えている場合はメニューから「ウィンドウ」>「ビューポート」をチェック

コンポーネント

ノードでプログラムを作る前に覚えておくこと。

ブループリントの中身はさらに「コンポーネント」の集まりである。

左上のウィンドウにどのコンポーネントがあるか表示されている。

image-20210106142332762

上の画像のようにコンポーネントが構成されている。

とりあえず、そんなのがあるんだ程度で認識しておく。

おまけ:コンポーネントだけで装備品などを表現

こちらは余談的に一歩進んだ内容。

  • コンポーネントを追加からを追加

image-20210106143034780

  • 球(Sphere)をドラッグしてMeshの上にドロップするとMeshを親にすることができる(これを親子付けと呼ぶ)

image-20210106143156004

  • Sphereをクリック、右の詳細ウィンドウから「親ソケット」をHead

image-20210106143304596

  • 球の位置が変な位置になるのでトランスフォームのリセットボタンをクリック

image-20210106143549453

  • これでキャラのアニメに連動して球もくっついて動く

image-20210106143636223

CharacterMovementコンポーネント

image-20210106144838728

こちらだけ少し特殊なコンポーネント。

動きを管理するコンポーネント。

クリックして右側のプロパティを変更するとキャラクターの移動速度などが変更できる。

image-20210106145016371

ゲーム実行中のパラメータ変更

image-20210106145350071

  • 画面右上「プレイ」で実際にゲームを実行して確認が可能
  • この状態でF8キーを押すとゲームを実行しながらパラメータを変更可能
  • 変更したいキャラをクリックして移動速度を変えてみる

image-20210106145521242

  • 上を変更した後もう一度F8でゲームに戻ると移動速度が変わっている

ゲームを停止するとパラメーターが戻ってしまう

上で自由にテスト中の移動速度などが変更できるが停止すればパラメーターは戻る。

そのままのパラメーターをキャラクターに適用したい場合

  • F8で抜けている状態でキャラを選択
  • パラメータが変更されていることを確認
  • この状態でkキーでパラメータを元データに適用

※必ずキャラが選択されていること

配置した個体のパラメータの違い

image-20210106150348664

  • 3体配置した場合は各個体デフォルト値は皆同じである
  • デフォルト値はブループリント内に記載してあるデータである
  • このままブループリントのパラメータを変更すると3体ともパラメータが変わる(BPの値)
  • 特定の一体を選んでパラメータを変更すると、その個体だけパラメータが変わる(真ん中だけジャンプ力を低く等)
  • 個体のパラメータを変更した後ブループリントを変更した場合、配置した個体側のデータで上書きされる

※最後の行だけ注意。実際に配置されているキャラのデータを変更した場合はBPのデフォルトを上書きするという仕組みなのでBPをいくら変更しても上書きした値に設定される。

配置した個体にで設定した値をブループリントに反映する

実際に配置したキャラクターのパラメータを弄った後、それをデフォルトにしたいと考えた場合。

その値をブループリントに書き込んでしまうことができる。

  • 値が入っている個体をクリックして選択
  • ブループリントを編集をクリック
  • インスタンス変更をブループリントに適用をクリック

image-20210106151333305

これでブループリントそのものが書き換えられる。

インスタンスとは?

ブループリントをレベル(ゲームのステージ)にドラッグドロップして実際の個体として配置した場合はこれをインスタンスと呼ぶ。

ブループリントは設計図のようなもので、それを元に実際に作成されたものがインスタンス。

ブループリントが1枚あればいくつでもインスタンスを作ることができる。

ノード

ノードを使ってアルゴリズムを組んでいく。

ノードの基本は箱を繋げていくだけでOK。

ノード編集画面を表示(イベントグラフ)

  • 先程のサードパーソンキャラクターをダブルクリックしてビューポートを開く。
  • 左側の枚ブループリントのイベントグラフをダブルクリック

image-20210107140137405

はじめは複雑になっているが今回はざっくり理解する。

Jumpの項目を見る

image-20210107140354182

  • 赤色のイベントに反応してPressed(押された)とReleased(離された)に分かれる。
  • 別れた先の「処理」が実行される。
  • 白色の紐はドラッグドロップでつなぐことができる

余談:切り離されたノードが残っていても問題はない

なぜノードを使うか

  • アーティスト側もプログラムを作れるようになる
  • プログラマの負担が減らせる
  • C++でももちろんプログラムはできる(Unreal C++)

余談

  • C#ゲーム部分では採用していない
  • Pythonはエディタ用のみだが非公式でゲーム用もある

マップ(レベル)を作ってみよう

新しくマップ(レベル)を作ってみる

コンテンツブラウザでマップ用のォルダを作っておくと便利

  • コンテンツブラウザで左クリックでレベルを追加しておく

image-20210107142235336

  • これで現れたレベルをクリックしても画面が真っ暗

image-20210107142254287

  • そこで「テンプレート」を使ってレベルの中身を作る
  • ファイル > 新規レベルでデフォルトを作ってみよう

image-20210107141551928

  • このままだとプレイを押してもサードパーソンが出ないことがある
  • 画面右側のワールドセッティング > Game Mode > ゲームモードオーバーライド > ThirdPersonGameModeに変更

image-20210107142650109

  • これでレベルができるのでプレイボタンを押せばすぐにサードパーソンが動かせる

image-20210107142719946

最初に作った変な玉をカブった奴が出た。

注意:レベルは保存されていない!

初心者がひっかかる点に気づいたので記述しておく。

この時点でコンテンツブラウザにあるレベルはまだ「真っ暗」なままである。

あくまでテンプレートで作った画面上のマップはメモリに読み込まれているだけで「保存されていない」のである。

したがって次の手順を必ず踏んでおく

  • ctrl+sファイル>レベルを保存をクリックする
  • コンテンツブラウザで作っておいた真っ暗なマップに上書きする

image-20210107144225763

これで初めてレベルは保存される。

※厳密には上の作業でNewMapを予め生成しておく必要はなく、レベルを保存時に新しく名前を付けて新規作成しても良い。

回転床を作ってみよう

  • コンテンツブラウザから右クリックでブループリントクラス

image-20210107145038787

  • Actorを選択する。※Pawnが似ているがAIを入れる場合等に使うので今回はActor
  • ダブルクリックしてコンポーネントを追加 > キューブ

image-20210107145405019

  • これだけでキューブが生成されるのでコンテンツブラウザからドラッグ&ドロップして配置できる

image-20210107145517031

  • レベル上でキューブを選択してトランスフォームをつかって床のサイズに変更

    image-20210107145656427

※ここで詳細の「Cube」をクリックせず拡縮を行った場合は後ほどBP側にデフォルト値として書き込む時に書き込めない事がわかった。必ずCubeをクリックしてからサイズ変更しよう。

image-20210107145820375

  • 右側の詳細パネルからブループリントを編集 > インスタンス変更をブループリントに適用

image-20210107145901355

※これで今レベル上で設定したパラーメータ(拡縮の値)がそのままBPに書き込まれる。

回すプログラム

イベント Tickはゲームが走っている間ずっと信号が出ているので

image-20210108105301019

このイベントが発動する度に少しずつ床を回転させてやれば良い。

  • 床ブロックのイベントグラフを開く
  • 右クリックでノードを追加する画面が出る

image-20210108105454947

Rotateなどで検索してやればある程度絞れるのでそうやって探そう

  • 回転を司るノードは「AddActorWorldRotation

image-20210108105531098

  • 追加したらノードを線でつなぐ
  • 下のDelta Rotationに設定した値だけ毎Tickごとに回転するのでZに0.5ぐらいを設定する
  • お好みの数字で縦回転などにしてもよい

image-20210108105746420

違うノードの組み方

  • GetActorRotation : アクターのRotationを取得
  • CombineRotators : 回転を足し算する
  • SetActorRotation : アクターの回転を入ってきた回転の値にセットする image-20210108110447531

ちょっと余談的なので覚えなくて良いかも。

「Get(とってくる)」と「Set(設定する)」があるよということを覚えておく

回転はコンポーネントで出来る

実は既にコンポーネントが用意されているのでノードを組む必要はなかった。

image-20210108110844026

  • RotatingMovementはコンポーネントを追加ボタンから
  • コンパイルする
  • 初期値が設定されているので追加するだけで設定なしで回転する。

※ローテーティングコンポーネントの設定「Rotating Rate」で回転設定は変えられる。

動かせない床もある

image-20210108112402521

RotatingMovementを入れてもトランスフォーム > 可動性がスタティックでは動かない

※エラーが出る

その場合はムーバブルに変更する

床を移動したい

今度は床を移動させたいという質問から発展。

移動は一方向だけではなく、帰ってくる処理が必要。

ここからは応用編だと思うので記事にはせずざっくり。

ノードで実現

このようなプログラムは変数と条件式を使う。

ノードで作る必要はないが練習に丁度よい模様。

変数と条件は別で解説記事を作った

【Unreal Engine4】はじめての変数

【Unreal Engine 4】条件分岐どうやるの?

※基本解説なので記事で移動床は作ってない。

変数と条件式がわかれば簡単かと思う。詳しくは動画を参照。

コンポーネントで実現

実はコンポーネントが用意されているので簡単

InterpToMovementというコンポーネントで移動床が作れる。

しかもこちらは設定した点をいったりきたりするコンポーネントなのでまさにコレ。

コンポーネントの使い方もここで書くべきでなさそうなので割愛。

さいごに

動画内このあとはオマケ的内容ではあるがここも結構濃いので参照してもらえればと思う。

さて、最後は駆け足となったが、それでもかなり冗長な記事となってしまった。

次回からこの手の記事を書く場合はパーツごとに分割して単発でも理解できる記事にしたほうが良いかと思う。

ひとまず記事を書いてしまったので公開としておく。

この記事をシェア:

author icon

Ultra-Noob @Neve1074
謎の技術研究部部長。元DTMer。今は何をしている人なのかよくわからない。謎。