🙆‍♀️

さっくり進めるUnreal Engine 5

2022/09/08に公開

Unreal Engineに最近キャッチアップしてたので、そのノートです。

前提

普段はiOSエンジニアをしています。
ゲーム開発は未経験ですが、以前Unityでアプリ開発をしたことがあります。
Unreal Engineは完全に名前だけしか知らない状態でした。

環境はM1 Macです。

Unreal Engineとは

Unreal EngineはEpic社が提供しているゲームエンジンです。
UnityとUnreal Engineがゲームエンジンの二大巨頭です。

ゲーム開発以外の用途でも、建築の設計図、自動車の設計図、動画の制作などにも使われているそうです。

Epic社とは

あまりにゲームに詳しくないので、Epic社の立ち位置をよく混乱するのですが、ざっくり言うと下記の会社です。

  • USのゲーム会社
  • 自社でゲーム開発するだけでなく、ゲームエンジンの提供もしている
  • ゲームを販売するストア(Epic Games Store)も運営している
  • Fortniteの開発会社
  • Apple/Googleのデジタルコンテンツの30%手数料に対して訴訟を起こして裁判中

ゲームメーカーであり、ゲームエンジンの提供サイドでもあります。

Unreal Engineのざっくり歴史

1998年にEpic社が自社のゲームタイトル「Unreal」向けに開発したゲームエンジンがUnreal Engineのはじまりです。
そこから社外向けに、ライセンス販売ビジネスとして広げていきました。
2015年から、現在の基本無償提供、ただし売上が一定以上になったら何%か手数料引く方式に変わりました。
(当時はUnreal Engine 4)
手数料はその後何度か変更があったようですが、現在は100万ドル/年を超えたら売上の5%を支払う義務が出るそうです。

そして、2020年にUnreal Engine 5が出て、今に至ります。

なぜUnreal Engineか

Unreal Engineを採用するメリットは、グラフィックの強さです。
大手ゲーム企業がつくってるみたいな、美麗なCGで映画の中を操作してるみたいなゲームをつくりたければ、Unreal Engineが向いていると思われます。

学習の進め方

色々本も出てますが、僕の場合、タイムリーにZennであったので、↓をもとに学習を進めました。

https://zenn.dev/daichi_gamedev/books/unreal-engine-tutorial

本はUnreal Engine 4のものは結構ありますが、5はまだあんまりないように感じました。
あと、ソフトウェアの学習に本ってちょっと微妙だなという気持ちが年々強くなってるので、動画コンテンツの方がまだいいかもしれません。
YouTubeでUnreal Engineで検索して出てきた動画見るだけでも結構進むかもです。

本当に正しいことを知りたいときは、公式ドキュメントをおすすめします。

https://docs.unrealengine.com/5.0/en-US/

サンプルプロジェクトをつくろう

公式サイトからUnreal Engineをインストールします。
Unreal Engine本体だけでなく、Epicのアプリがたくさん入ります。

その中から「UnrealEditor」を開きます。

こんな感じでエディタが立ち上がります。

サンプルプロジェクトは初期設定が色々選べますが、とりあえずは「First Person」か「Third Person」かが使いやすいと思います。
とりあえず深く考えず、「Third Person」設定で、「MyProject」を作成します。

するとエディターが立ち上がります。
この記事はあくまでさっくり進めたいので、エディターの詳細はこの記事とかを見てください。

レベルの概念

Unreal Engineにはレベル(Level)という概念があります。
これがすごく大事な概念です。
今エディタ上で表示している3D世界は、1つのレベルです。
Unityをやったことがある人なら、Sceneに相当します。

例えばマリオみたいなゲームで、4ステージあるとすると、ゲーム開発としてはステージごとに4つレベルを作成します。
1stステージ用のレベルで、プレイヤーがクリア条件を満たしたら、2ndステージ用のレベルを呼び出す、みたいにして使います。

ここでいうレベルは、RPGのキャラクターのレベルのことではなく、おそらく(建物の)何階みたいな意味のレベルなんだと思います。たぶん。
(=a floor in a large building)

Unreal Engineでつくるゲーム世界は、複数のレベルで構成されます。

(公式ドキュメント)
https://docs.unrealengine.com/5.0/ja/levels-in-unreal-engine/

実体は .umapファイルです。
レベルは、概念としてはマップやステージとほぼ同じなので、文脈によってはそっちで呼ばれることもあります。
今回のサンプルプロジェクトだと、ThirdPersonMap がデフォルトレベルとして指定されています。

Edit > Project Settings > Maps & Modes からデフォルトレベルの変更が可能です。

レベルの移動は、後述するブループリントなりC++なりで記述します。

最初僕はこの辺の仕組みがわかってなくて、新しいレベルを作成したらデフォルトのレベルに戻れなくなりました。

アクターを配置する

Unreal Engine上で、テキトーにオブジェクトを増やしていくのは、GUI操作でできるので、なんとなくできると思います。
(3D操作がはじめてだと、そこに戸惑うかもしれませんが)

レベル上に配置されたオブジェクトをUnreal Engineではアクターと呼びます。
またフォルダの中にある素材のことをアセットと呼びます。
この記事を読むにあたっては、レベルとアクターだけわかっておけばOKです。

Unity経験者だと、座標軸が違うので、そこに戸惑います。
Unityだと水平方向をXZで表して、垂直方向がY軸なんですが、Unreal Engineだと垂直方向はZ軸です。
個人的にはUnityの垂直方向をY軸で表すの違和感あったので、Unreal Engineの方がいいですが、ちょっと戸惑います。

動きをつける

静的なオブジェクトを追加するのは、GUI操作でなんとかなります。
ただゲームは動いてナンボなんで、動きをつけましょう!

Unreal Engineでは、オブジェクトの操作のために、ブループリントとC++という2つの選択肢があります。
どちらもプログラミングなので、プログラミング未経験でゲーム開発したい人はここが壁かもです。

ブループリント

英語で「設計図」を意味するBlueprintですが、UEにおいては、ノードベースのプログラミングシステムです。
具体的には、こんな画面です。

コードを直接書く必要がないので、プログラミング未経験であれば、だいぶとっつきやすいかとは思います。

C++

C言語系のプログラミング言語です。

ブループリント vs C++

Unreal Engineの推しとしては、ブループリントみたいです。
なるべくコード書かなくても、ゲームがつくれる世界を提供したいみたいです。
触った感じだと、かなりイベントがたくさんあるので、大抵のことはブループリントでできる印象でした。

ブループリントの問題としては、差分の確認がしづらいので、
プロジェクトの規模が大きくなると、レビューが大変になったり、保守が困難になってきたりするところでしょう。

教科書的には、ブループリントの手軽さと、C++のコードベースの良さとを上手いこと適材適所で使ってくのがいいでしょう。
個人のゲーム開発者であれば、とりあえずブループリントで動かして、限界を感じたらC++を勉強し始めるでいいのではないでしょうか。

レベルブループリント vs ブループリントクラス

ブループリントは2種類の配置場所があります。
レベルブループリントは、レベルに紐づくものです。
例えば、ステージが始まった瞬間に何か実行したい処理があったとすると、レベルブループリントの中に書くのが適切です。

しかし敵キャラの登場のときに実行する処理、たとえば「画面にキャラが表れたら火を吹く」みたいな処理を書くとしたら、
レベルそのものよりも、敵キャラのアクターに紐付けたいですよね。
ここで使うのがブループリントクラスです。

詳しい設定は下記をご覧ください。

https://zenn.dev/daichi_gamedev/books/unreal-engine-tutorial/viewer/blueprint-level-blueprint

ブループリントでキーボードの入力を受け付けてみる

とりあえずさっくりサンプルプロジェクトにアクションを追加してみました。

こんなブループリントを追加します。

https://twitter.com/0si43/status/1565923219227287552?s=20&t=B2EgD-WxUq3_otqr4VpNCg

すると、Fキーを押すと主人公キャラ周辺が燃える、というアクションが追加できました。
やったね!

UIをつける

ゲームはアクションだけでなく、色々なUIパーツをつける必要があります。
たとえば

  • HPバー
  • メッセージ
  • 設定ボタン

などなど。

Unreal Engine 5では、UMG(Unreal Motion Graphics)という機能が提供されていて、UI部品がつくれます。
これもブループリントの仕組みが使われていて、アセットとしてはウィジェットブループリントという名前がついています。

↑これですね。
アセットを開くと、こんなエディタが開きます。

これでポチポチウィジェットをつくります。
つくったら、何らかのブループリントを設定して、表示します。

たとえば↑こんなブループリントです。
ちょっと当初の想定より記事全体が長くなっているので、詳細は↓こちらの記事を参照してください。

https://zenn.dev/daichi_gamedev/books/unreal-engine-tutorial/viewer/ui-basic

(了)

Discussion