Unreal Engine 4 備忘録
2020-03-21
Unreal Engine 4 を仕事でちょっと触ったときの個人的なメモ
(UE 4.21 くらいの頃)
概要・歴史
- Epic Games 社によるゲームエンジン。写実的なグラフィックが得意
- 1998 年リリースの FPS「Unreal」で使われたエンジンが原型
- Unreal Engine - Wikipedia
- UE4 は 2012 年頃リリースの模様
特徴
- 言語は C++ と、ビジュアルスクリプトである Blueprint を用いる
- ゲームエンジンのソースコード(C++)が公開 されていて、全部読める
- UE4 エディタを動かすのに要求されるスペックは(Unity などと比較して)高め
- 強めのグラフィックボードを積んだ Windows 推奨
- Mac は 2015〜 頃の MacBook Pro ではもはやツラい… くらいの温度感。iMac 2019 ならまあなんとか
- もともと FPS 向けに作られているので、FPS っぽいゲームを作るのは得意
- リアルタイム通信のマルチプレイも、まるっと乗っかるなら楽に作れるような仕組みが用意されている
費用感
- 料金形態はロイヤリティー形式
- 「四半期ごとの総売上で 3,000 ドルを超えた部分」の 5 %を支払う
- Unity (Pro) の 1 人 1 年 16,500 円と比べると、開発期間中に何人で使っても無料で使える、という違いはある
- 開発メンバーが多く長期間の開発になる大規模開発では(ゲームがコケてもお金を払わなくて良いので)リスクヘッジにはなる
採用事例
- Unreal Engineを採用したゲームソフト一覧 - Wikipedia
- List of Unreal Engine games - Wikipedia
- 据え置き機向けのハイエンドゲームで多く採用されている
- 「バイオショック」「フォートナイト」「Borderlands 3」など
- 国内産では「ドラクエ XI」「FF VII リメイク」「キングダムハーツ III」「エースコンバット 7」など
- モバイル向けは 2020 年現在では Unity が採用されるケースが多いが、たまに UE4 で作ってるやつもある
- 「PUBG」「Lineage 2 Revolution」「OVERHIT」など
- 「Life is Strange」(2015) も UE4 製で、2017 年に iOS / Android 版が出ている
- 据え置き機向けのハイエンドゲームで多く採用されている
情報源
Web 上の情報
- 公式ドキュメント
- Epic Games 公式のスライド集
- UE4 のゲーム開発を行っている株式会社ヒストリア社の技術ブログ
- UE4・ニュース・イベント|ゲーム企画・開発のヒストリア
- (2015-06) UE4 C++ or Blueprint?|株式会社ヒストリア
- (2015-06) UE4 モジュールについて|株式会社ヒストリア
- (2015-08) UE4 HTTP通信 その1 ~基本編~|株式会社ヒストリア
- (2015-09) UE4 知っておくと便利かもしれない!豆知識(ショートカットキー編)|株式会社ヒストリア
- UE4 の話題を扱っているブログ
- 参考事例
- (2018-05) Fortniteを支える技術
- ライティングなど描画まわりの話
- (2017-09) [CEDEC 2017]最近の「Unreal Engine 4」はモバイル開発もいける。見えてきた活用ノウハウと最新機能 - GamesIndustry.biz Japan Edition
- (2018-05) Fortniteを支える技術
- サンプルプロジェクト
- (2018-09) 猫でも分かる UE4の新しいサンプル「Action RPG」について
書籍
総合的な入門書で日本語のものは以下が代表的。というか、これ以外にはあまり無い:
- バンナムの開発者さん達による解説書
- エディタの各種機能の使い方が画像つきで解説されており、大枠の理解に便利
- ただし UE4 向けの C++ 実装の話は載っていないので、そこは期待してはいけない
- (書籍に出てくる処理の制御は Blueprint で行われている)
初めに押さえておきたい系
- 公式ドキュメント
- (2018-03) UE4でゲームを製作するときに気をつけること - Qiita
- ハード参照 / ソフト参照 という概念がある
UE 用語
- レベルとマップ?
- 同じものと考えてよさそう
- アセット
- (ファイルに対して)シリアライズされた UObject のこと
- クック
- 各プラットフォーム向けの最終的なバイナリ形式に変換すること
基本操作 / 基礎知識
エディタが重すぎる時
- (2018-12) UE4軽量化 - ニートが始めるUE4開発日誌
- (2015-05) UE4 ノートパソコンで使う時にバッテリーを長く使うためのTips - Let’s Enjoy Unreal Engine
UE4 のエディタはデフォルトだと、ゲームを実行していない時でも全力のフレームレートで 描画を行おうとする。 Mac だと立ち上げているだけでファンが唸るレベル。 作業時は別に全力で描画してくれなくてもいいので、自分は以下のような設定をして CPU / GPU 使用率を下げていた:
- リアルタイムレンダリングを OFF にする
- コンソールに
t.MaxFPS 10
などと打ってフレームレートを制限する- Window → Developer Tools → Output Log を選択するとコマンド入力欄が出てくる
- 以下のファイルの
[Startup]
の下にコマンドを書くとデフォルトで適用してくれる… みたいな情報を見かけたが、自分の環境では効いてくれなかった
- /Users/Shared/EpicGames/UE_4.21/Engine/Config/ConsoleVariables.ini
雑多な Tips
- 最初に開くシーン(レベル)の設定って?
- デフォルトのレベルを変更する | Unreal Engine ドキュメント
- Project Settings → Project → Maps & Modes
- デフォルトのレベルを変更する | Unreal Engine ドキュメント
- 実行時にマウスポインタが消えたぞ
- Shift + F2 で再表示
- キーボードショートカットの設定は?
- Editor Preferences で設定できる
- Open Level Blueprint とかはよく使う気がしたので僕はショートカットを割り当てた
UE4 のソースコード
- ソースコード、それは最終的に辿り着く真理
- ドキュメントが足りない時に ソースコードという最強の仕様書 が読めるぞ!
- UE4 エディタ自体をソースからビルドして動かすこともできる
UE4 での C++ 実装
- (2015-09) UE4とUnrealC++について
- C++ 11 ベース
- とは言え UE4 仕様の C++ という感じで、メモリ管理やライブラリまわりは UE が用意したものに乗っかる感じ
- UE 独自のマクロを随所に書くイメージ
- C++ だが、なんかエディタでホットリロードができてすごい
クラスの接頭辞
- コーディング標準 | Unreal Engine
- テンプレートクラスは
T
、インタフェースはI
/ まあこれはよくある UObject
とかAActor
とかSWidget
とか
- テンプレートクラスは
AActor とかのクラスの継承関係
こういう感じ:
- UObject
`--- AActor
|--- APawn
| `--- ACharacter
|--- AController
| `--- APlayerController
:
アサーション
check
とかensure
とかあるけど、check
で引っかかると エディタごと落ちる ので注意- (2019-05) UE4 | UE4のアサーションについて考える|株式会社ヒストリア
Blueprint
- (2016-08) 出張ヒストリア ブループリントを書くにあたって大切なこと
- (2016-12) UE4 イベント・関数・マクロ・インターフェイスの違いと使い分け - GameProgrammar’s Night
- (2017-04) UE4 比較的大規模におけるブループリントの運用 - Let’s Enjoy Unreal Engine
- ビジュアルスクリプトの Blueprint は UE4 の特徴的な機能のひとつ
- 基本は簡単な処理を組んだり、プログラマが C++ 側で実装した処理を呼び出す形で敵 AI とかのシーケンスを組む、
みたいな使われ方が想定されていると思う
- (当然 C++ と比較すれば実行時のオーバヘッドはそれなりにある)
- 仕事で少し、ある程度まとまった処理を Blueprint で組んでみたりもしたが、
まあまあ壮大な感じ (全貌を知るには画面数枚分のグラフを眺める必要がある感じ) になってしまった
- Blueprint の量が多くなってきた時に見通しを良く保つのはセンスが要りそう
- あとノードや線の配置センスも要りそう
- 複数人が同じ Blueprint をさわったらコンフリクトがつらそう?
- 一応マージツールみたいなものは用意されてるらしい
マルチプレイ
- もともと公式で、サーバとして動作する機能が用意されている
- (2015-10) C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて
- (2016-02) UE4におけるRPCでの同期処理、UDP通信を利用したアプリケーション連携について|株式会社ヒストリア
モバイル向けのアセットダウンロード
Unity では AssetBundle というのが昔からあるが、UE4 公式でモバイル向け動的アセット更新に対応してきたのは比較的最近の様子。
情報源
- Epic Game Japan の人のスライド。アセット更新まわりに関しては貴重な情報源
- 公式ブログ
- (2018-03) チャンク化による高速ダウンロードを可能にするツールと最適化の考察
- Epic Games のゲーム Battle Breakers で実際に Chunk 運用を行った事例。 Chunk ID の振り方 / 管理方法の例が載っている
- (2018-03) チャンク化による高速ダウンロードを可能にするツールと最適化の考察
- 公式マニュアル
Asset Manager と Chunk
エンジンのソースコードで関連が深そうなのはこのあたり:
- Engine/Source/Runtime/Engine/Private/AssetManager.cpp
- Engine/Source/Runtime/Online/BuildPatchServices/Private/BuildPatchInstaller.cpp
- Engine/Source/Runtime/Online/BuildPatchServices/Private/BuildPatchServicesModule.cpp
(以下、ダウンロードを DL と表記)
- Asset Manager は UE4.17 (2017-08) 以降で正式リリースされた、UE4 公式のアセット管理機構
- アセットを Primary Asset / Secondary Asset という親子関係に分類して管理
- Secondary Asset とは、Primary Asset が参照しているアセットを意味する
- 例えばキャラクタの BluePrint を Primary にして、キャラのマテリアルやモーションを Secondary にするなど
- 公式の機能であり、Epic Games 自身も自分たちのゲームでドッグフーティングしている様子
- 配信用のアセット単位は Chunk と呼ばれる
- 同じ Chunk ID を降ったものが同じ Chunk (.pak ファイル) にまとまる
- Chunk ID = 0 はパッケージ(ipa / apk)に抱き込まれる初期アセットとなる
- Project Settings → Asset Manager などで事前設定を行っておけば、あとはパッケージングを行えば Chunk ファイルが生成される
- CloudDir というディレクトリ配下に出力されるファイル群を配信サーバにアップロードすればよい
- 生成されるファイルは Chunk ごとのデータと Manifest
- Manifest はバージョン情報とファイルのハッシュ値を含む
- DL 関数は 「バージョンが違う」 か 「バージョンは同じだがハッシュが違う」 場合に再 DL してくれる様子
- (特定の Chunk だけ修正する場合はバージョンを変えずに Chunk を再作成する)
- Primary Asset には Primary Asset ID と Chunk ID が割り当てられる
- Primary Asset ID は Asset Manager の管理用
- Chunk ID は上述したもの。Secondary Asset にも同じ ID が連鎖的に適用される
- Chunk の DL 処理について:
- 起動時に一括 DL する場合はよしなにやってくれるらしい
- 都度 DL は Asset Manager のロード関数を利用して行う
- Project Settings → Asset Manager → Should Acquire Mission Chunks on Load を有効にしておく
- 基本的な DL 処理は BP ノードで提供されている
- Chunk の DL 後にそいつをマウントしてやれば、最初からそのアセットが抱き込まれていたかのようにアセットを扱える(多分)
UE4 さわったときの個人的な所感
- 自分は普段は Unity を使っているが、Web 上や書籍の情報量の多さで言うとやはり圧倒的に UE4 の方が少ないな… というのは思った
- (というか Unity が人気すぎるだけで、他のマイナーなエンジンに比べたら UE4 は情報がある方だが)
- ちょっと凝った機能 (アセット更新のための Chunk 機能とか) を試すときに、 Web 上の情報や API Reference だけでは細かい仕様が十分にわからず、 結局最後はソースコードを読みに行く、ということがあったので、コードリーディングの力はつきそう
- 開発は Mac より Windows 機の方が安定しそう
- グラボやマシンスペックを用意するコスパ面でもまあ Windows が順当
- Mac で動かしてた時は何でもないところでエディタがクラッシュすることもちょいちょいあった
- ちょっとさわった程度なのでまだ全然深く理解できてはいないが、 レンダリングまわりとかに踏み込んだらもうちょっと見えてくるものがあるのかな?
- ビジュアルスクリプティングは初めてだったので、Blueprint は新鮮で面白かった
- 非エンジニアの人の場合、あれはどれくらいとっつきやすいものなのだろうか…
- あれでロジック組めるなら別に Lua みたいなスクリプトでも書けるのでは? と思ってしまうのは自分がプログラマだからか
- まあでもコードで書くのと違って 「選べるものしか選べない」 みたいな安心感はあるか